0

问题:

  • 调用send() ,针对套接字句柄返回 Winsock 错误10038

插图:

acceptedSocket = accept (server, (sockaddr *)&sin, &len);
  • 接受(),返回0
    • 为每个连接创建一个新线程
    • send(),(在线程函数中)返回10038

说明: - 在线程函数中

//omitted
SOCKET RemoteSocket = (SOCKET) client;
//omitted
send (RemoteSocket, stringToSpend, strlen(stringToSpend), 0)

建议:

  • 可能,比赛条件?
  • 可以使用 I/O 完成端口,但现阶段不能
4

3 回答 3

2

accept() 为您返回一个新的特定于连接的套接字的句柄。对于服务器代码,它涉及 2 个以上的套接字:一个处于侦听状态,您正在调用 accept(),第二个是从 accept() 返回的一个 - 它是一个传入连接套接字。跟随 accept() 可以为第二个传入连接返回套接字等。如果 accept() 返回 0 它不是传入连接 - 这是一个错误。

于 2009-02-23T14:43:27.070 回答
2

问题不在于行吗

acceptedSocket = accept (server, (sockaddr *)&sin, &len) == INVALID_SOCKET)

你做出acceptedSocket比较的结果,但你应该以某种方式存储从接受返回的实际套接字:

acceptedSocket = accept (server, (sockaddr *)&sin, &len);
isOK= acceptedSocket!=INVALID_SOCKET;

虽然我对你帖子中不平衡的括号有点困惑,所以我可能是错的

于 2009-02-23T14:52:19.777 回答
0

嗯,似乎你send在发生之前执行得太快accept了。因此,在 send 执行时,send 中使用的套接字无效。多线程令人讨厌的特性之一。您需要在线程处等待事件并在send发生接受时触发事件

于 2009-02-23T14:50:48.300 回答