send(),返回Winsock错误10038

时间:2009-02-23 14:23:42

标签: c++ windows visual-studio-2008 multithreading winsock

问题:

  • 致电发送(),针对套接字句柄返回Winsock错误 10038

插图:

acceptedSocket = accept (server, (sockaddr *)&sin, &len);
  • 接受(),返回 0
    • 为每个连接创建一个新的主题
    • 发送(),(在线程功能中)返回 10038

插图: - 在线程功能中

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

建议:

  • 可能,竞争条件?
  • 可以使用I / O完成端口,但不能在此阶段使用

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

不是行中的问题

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

你将acceptedSocket作为比较的结果,但你应该以某种方式存储从accept返回的实际套接字:

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

虽然我对你帖子中不平衡的括号感到有些困惑,但我可能错了

答案 2 :(得分:0)

嗯,好像你的sendaccept发生之前执行得太快了。因此发送中使用的套接字在执行发送点时无效。多线程的一个令人讨厌的特征。您需要等待send线程中的事件并在接受发生时触发事件