не удалось создать объект CSocket - PullRequest
0 голосов
/ 16 марта 2012
CSocket listSock,lisRecvSock;

if(!listSock.Create(pwd->m_ServerPort))//sometimes i got a CResourceException,why?
{
    pwd->GetSocketError();
    return -1;
}    
if(!lisRecvSock.Create(pwd->m_ServerPortRecv))
{
    pwd->GetSocketError();
    return -1;
}

lisRecvSock.Listen(3);
listSock.Listen(3);
//and the Accept sometimes return WSAEINVAL,accordingto msdn,I should Bind the socket
//to a specific port and IP address,but the CSocket would Bind when Create     invoked,isn't it?
if(!listSock.Accept(pwd->SendSock))
{
    pwd->GetSocketError();
    return -1;
}

почему я получил CResourceException при вызове Create () и повторном запуске WSAEINVAL?Accept иногда возвращает WSAEINVAL, согласно msdn, я должен связать сокет с конкретным портом и IP-адресом, но CSocket будет связываться при вызове Create, не так ли?

1 Ответ

0 голосов
/ 15 августа 2012

Ответ, вероятно, заключается в том, что Socket.Create () не является потокобезопасным.
Поэтому, если вы создаете сокет из нескольких потоков, он может получить исключение.
Попробуйте защитить вызов Socket.Create.() с Mutex.Вы можете найти пример на:
http://www.codeproject.com/Articles/7953/Thread-Synchronization-for-Beginners

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...