|

楼主 |
发表于 2004-9-27 13:26:00
|
显示全部楼层
Re:Recv函数执行时间过长,请问大家如何解决?
我的关键代码:
wVersionRequested = MAKEWORD ( 2, 2 );
err = WSAStartup ( wVersionRequested, &wsaData );
...
_socket = socket(AF_INET, SOCK_STREAM, 0);
sockAddr.sin_family=AF_INET;
sockAddr.sin_addr.s_addr= inet_addr(server);
sockAddr.sin_port= htons( port );
if (SOCKET_ERROR == WSAAsyncSelect(
_socket,_hwnd,NETCLIENT_EVENT_MSG,
FD_CONNECT | FD_CLOSE | FD_READ))
{
closesocket( _socket );
_socket = INVALID_SOCKET;
return false;
}
.....
result = connect(_socket, (const struct sockaddr FAR*)&sockAddr, sizeof (sockAddr));
if (result == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK )
{
closesocket( _socket );
_socket = INVALID_SOCKET;
return false;
}
....
消息处理:
switch( WSAGETSELECTEVENT(lParam) )
{
case FD_READ:
{
WSAAsyncSelect(_socket, _hwnd, NETCLIENT_EVENT_MSG, 0);
int iMode = 0;
ioctlsocket(_socket, FIONBIO, (u_long FAR*) &iMode);
char datatype = 0;
if (!socket_recv(&datatype, 1, wParam, lParam))
return true;
switch(datatype)
{
case NETSHORTMSG:
{
char datalen = 0;
if (!socket_recv(&datalen, 1, wParam, lParam))//测试消耗140多毫秒
return true;
........ |
|