I am trying to set
SO_RCVTIMEO for read timeout, but __pthread_read() is not
timing out. Do
you know anything about this?
Here is my code
below:
Helen
===============================================
int connectServer
(char *szIPAddr, int nPort)
{
int nError;
int cnt;
struct sockaddr_in saClient;
struct sockaddr_in saServer;
struct timeval timeout;
{
int nError;
int cnt;
struct sockaddr_in saClient;
struct sockaddr_in saServer;
struct timeval timeout;
memset(&saClient, 0, sizeof(SOCKADDR));
memset(&saServer, 0, sizeof(SOCKADDR));
memset(&saServer, 0, sizeof(SOCKADDR));
saClient.sin_family = AF_INET;
gClientSocket = socket(saClient.sin_family , SOCK_STREAM, PF_UNSPEC);
if(gClientSocket == INVALID_SOCKET)
{
gClientSocket = 0;
return ERROR;
}
gClientSocket = socket(saClient.sin_family , SOCK_STREAM, PF_UNSPEC);
if(gClientSocket == INVALID_SOCKET)
{
gClientSocket = 0;
return ERROR;
}
/* bind
to socket */
nError = bind(gClientSocket, (const struct sockaddr *)&saClient, sizeof(saClient));
if(nError != 0)
{
close(gClientSocket);
gClientSocket = 0;
return ERROR;
}
nError = bind(gClientSocket, (const struct sockaddr *)&saClient, sizeof(saClient));
if(nError != 0)
{
close(gClientSocket);
gClientSocket = 0;
return ERROR;
}
saServer.sin_family = AF_INET;
((struct sockaddr_in *)&saServer)->sin_port = htons((USHORT)nPort);
((struct sockaddr_in *)&saServer)->sin_addr.s_addr = inet_addr(szIPAddr);
((struct sockaddr_in *)&saServer)->sin_port = htons((USHORT)nPort);
((struct sockaddr_in *)&saServer)->sin_addr.s_addr = inet_addr(szIPAddr);
/*
Connect to socket server.*/
nError = __pthread_connect(gClientSocket, (struct sockaddr *)&saServer, sizeof(saServer));
if(nError != 0)
{
close(gClientSocket);
gClientSocket = 0;
return ERROR;
}
nError = __pthread_connect(gClientSocket, (struct sockaddr *)&saServer, sizeof(saServer));
if(nError != 0)
{
close(gClientSocket);
gClientSocket = 0;
return ERROR;
}
timeout.tv_usec = 0;
timeout.tv_sec = 5;
if((setsockopt(gClientSocket, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout,
sizeof(timeout)))) {
close(gClientSocket);
gClientSocket = 0;
return ERROR;
}
.....
cnt =
__pthread_read(gClientSocket, pResponse,
MAX_MSG_SIZE);
....
....
return
OK;
}
}