Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows TCP关闭,通过AcceptEx()连接套接字_Windows_Sockets - Fatal编程技术网

Windows TCP关闭,通过AcceptEx()连接套接字

Windows TCP关闭,通过AcceptEx()连接套接字,windows,sockets,Windows,Sockets,文件说明: 成功完成此操作后,可以启动sAcceptSocket 已传递,但仅传递给以下函数: 读取文件 写文件 发送 沃森德 记录 WSARecv 传输文件 插座 setsockopt(仅适用于SO\u更新\u接受\u上下文) 请注意,列表中没有此项。实际上,调用shutdown(sAcceptSocket,SD\u SEND)返回SOCKET\u错误和WSAGetLastError()产生错误WSAENOTCONN: 不允许发送或接收数据的请求,因为套接字未连接,并且(使用sendto调

文件说明:

成功完成此操作后,可以启动sAcceptSocket 已传递,但仅传递给以下函数:

  • 读取文件
  • 写文件
  • 发送
  • 沃森德
  • 记录
  • WSARecv
  • 传输文件
  • 插座
  • setsockopt(仅适用于SO\u更新\u接受\u上下文)
请注意,列表中没有此项。实际上,调用
shutdown(sAcceptSocket,SD\u SEND)
返回
SOCKET\u错误
WSAGetLastError()
产生错误
WSAENOTCONN

不允许发送或接收数据的请求,因为套接字未连接,并且(使用sendto调用在数据报套接字上发送时)未提供地址


为什么不能关闭通过
AcceptEx()
连接的套接字?另外,既然套接字已经在接收数据(重叠操作已经完成,并且完成通知表明已接收到一些
size>0
字节),为什么套接字没有显示为已连接?

您必须在
AcceptEx()
完成后调用
setsockopt(SOL\u socket,SO\u UPDATE\u ACCEPT\u CONTEXT)
。接受的套接字未与侦听套接字的属性完全关联,因此在设置
SO\u UPDATE\u ACCEPT\u CONTEXT
之前,不会处于完全连接状态。一些winsock API函数受此影响,包括
getpeername()
getsockname()
shutdown()


如果使用
ConnectEx()
建立出站连接,则必须在
ConnectEx()
完成后调用
setsockopt(SOL\u SOCKET,SO\u UPDATE\u CONNECT\u CONTEXT)
,然后才能使用
shutdown()
。这在MSDN上。它对
AcceptEx()
没有相同的说明,所以更新\u ACCEPT\u CONTEXT
,但是
shutdown()
AcceptEx()
接受的套接字有类似的限制。客户端还没有关闭连接吗?如果在
AcceptEx
之后直接执行
shutdown
,是否会出现相同的错误?@JoachimPileborg:否,客户端尚未关闭连接。我正在测试使用“Connection:keep alive”头接受来自Chrome的HTTP请求。无论是否发送数据,我都会收到此错误。我已经在调用
setsockopt()
以确保
getpeername()
等按预期工作。让我运行一些测试,我会在这个问题上与您联系。我不确定我最初测试的顺序,但它现在可以工作了。如果删除对
setsockopt()
的调用,我会再次收到错误。谢谢!