从Socket.Send

时间:2016-06-15 06:31:41

标签: c# sockets

这类似于this question,但适用于Socket.Send

给出一些像这样的代码

int bytesSent = socket.Send(BitConverter.GetBytes((int)0));//send 4 bytes

小于4的可能是socket.Send的返回值吗? 在回答之前请阅读

文档明确指出:

  

同步发送数据到Connect或Accept方法中指定的远程主机,并返回成功发送的字节数。

询问的原因是我试图追踪一个进程间套接字连接的问题(在同一服务器上运行的两个进程,win2012 R2),如上所述调用Socket.Send

虽然我熟悉通过套接字安全发送/接收字节我想要一些知道本机调用内部的人的确认,这可以确认进程间调用不发送4的可能性字节,因此Socket.Send返回的字节数少于此。这可能在负载下吗?

可以通过正确写入套接字来轻松修复代码,但是如果有人要查看此代码并说no i would expect a **minimum** of 4 bytes for this type of call那么显然这不是我的问题

1 个答案:

答案 0 :(得分:1)

来自remarks section here

  

在非阻塞模式下,即使发送的内容少于您请求的字节数,Send也可以成功完成。在应用程序发送请求的字节数之前,您的应用程序有责任跟踪发送的字节数并重试操作。

所以真的归结为yourSocket.Blockingtrue还是false。 IIRC,默认情况下这不是一个问题,如果你没有改变这个属性,你应该没事。