Hi..I am writing a server code for TCP/IP. The code is:
#include<winsock2.h>
#include<windows.h>
#pragma comment(lib,"user32.lib");
#include<stdio.h>
#include<string.h>
#include"tcpip.h"
/*Function definitions for communication over TCPIP*/
/*Parameters for TCP/IP Communication*/
WSADATA wsaData;
WORD version;
int error = 0;
SOCKET server_addr;
SOCKET client_addr;
struct sockaddr_in Start_Server;
int length = 0;
char tcp_ip_recv[20];
char *at_mmi_command;
/*Function initializes winsock*/
int Ta_Ut_tcpip_winsock_init()
{
version = MAKEWORD( 2, 0 );
/*initiate use of the Winsock DLL by a process*/
/*Arg1-highest version of Windows Sockets specification*/
/*Arg2-pointer to WSA data structure that is to receive details of the Windows Sockets implementation*/
error = WSAStartup( version, &wsaData );
/* check for error */
if ( error != 0 )
{
/* error occured */
printf("\nError in WSAstartup\n");
}
/* check for correct version */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 0 )
{
/* incorrect WinSock version */
WSACleanup();
return FALSE;
}
/* WinSock has been initialized */
}
/*Function creates a socket*/
void Ta_Ut_tcpip_create_socket()
{
server_addr = socket( AF_INET, SOCK_STREAM, 0 );
client_addr = socket( AF_INET, SOCK_STREAM, 0 );
}
/*Function starts the server*/
void Ta_Ut_tcpip_start_server()
{
/*Start the Server*/
/*Specify end-point address using sockaddr_in structure*/
Start_Server.sin_family = AF_INET;
Start_Server.sin_addr.s_addr = INADDR_ANY; //receive packets from all interfaces
Start_Server.sin_port = htons( 5000 ); //htons converts a u_short from host to TCP/IP network byte order
/*Bind to the socket*/
if ( bind( server_addr, &Start_Server, sizeof ( Start_Server ) ) == SOCKET_ERROR )
/* could not start server */
printf( "Binding Error with error %d\n", WSAGetLastError() );
}
/*Funtion enables server to listen to the client*/
void Ta_Ut_tcpip_listen_client()
{
/*Server listens for the client*/
while ( listen( server_addr, SOMAXCONN ) == SOCKET_ERROR )
printf( "Error Listening with error %d\n", WSAGetLastError() );
}
/*Function enables server to accept client connection*/
void Ta_Ut_tcpip_accept_client()
{
length = sizeof (Start_Server);
client_addr = accept( server_addr, &Start_Server, &length );
}
/*Function sends data over TCP/IP*/
void Ta_Ut_tcpip_send(at_mmi_command)
{
if(( send( server_addr,at_mmi_command , sizeof at_mmi_command, MSG_OOB) == SOCKET_ERROR ))
printf( "Error sending with error %d\n", WSAGetLastError() );
}
/*Function receives data over TCP/IP*/
char *Ta_Ut_tcpip_receive()
{
memset( tcp_ip_recv, 0, sizeof tcp_ip_recv );
if(( recv( server_addr, tcp_ip_recv, sizeof tcp_ip_recv, MSG_OOB) == SOCKET_ERROR ))
printf( "Error receiving with error %d\n", WSAGetLastError() );
return tcp_ip_recv;
}
/*Function closes socket to terminate communication over TCPIP*/
void Ta_Ut_tcpip_close_socket()
{
/*Close socket*/
closesocket( server_addr );
WSACleanup();
}
/*Reset TCP/IP connection*/
void Ta_Ut_tcpip_reset()
{
memset( tcp_ip_recv, 0, sizeof tcp_ip_recv );
int error = 0;
int length = 0;
}
The functions used above are declared in a header. Now I have to set a timeout for receiving i.e. I have to stop waiting to receive data after say 60 sec..how exactly do I go about that? Is there a specific function for that as in serial communication? I have looked around but have not been able to find good pointers in that direction. Kindly advise. Thanks.