#include <stdio.h>
#include <winsock2.h>
int main(int argc, char *argv[])
{
WSADATA wsaData;
SOCKET ListenSocket = INVALID_SOCKET;
struct sockaddr_in service;
int iResult = 0;
struct hostent *thisHost = NULL;
char *ip = NULL;
u_short port = 0;
BOOL boOptVal = FALSE;
int iOptLen = 0;
int iOptVal = 0;
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult)
{
printf("WSAStartup() Failed.\n");
return 1;
}
ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ListenSocket == INVALID_SOCKET)
{
printf("socket() Failed.\n");
WSACleanup();
return 1;
}
port = 27015;
thisHost = gethostbyname("");
if (thisHost == NULL)
{
printf("gethostbyname() Failed.\n");
closesocket(ListenSocket);
WSACleanup();
return 1;
}
ip = inet_ntoa(*(struct in_addr *)*thisHost->h_addr_list);
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr(ip);
service.sin_port = htons(port);
iResult = bind(ListenSocket, (SOCKADDR *)&service, sizeof(service));
if (iResult == SOCKET_ERROR)
{
printf("bind() Failed.\n");
closesocket(ListenSocket);
WSACleanup();
return 1;
}
boOptVal = TRUE;
iOptLen = sizeof(int);
iResult = getsockopt(ListenSocket, SOL_SOCKET, SO_KEEPALIVE
, (char *)&iOptVal, &iOptLen);
if (iResult != SOCKET_ERROR)
{
printf("SO_KEEPALIVE value: %ld\n", iOptVal);
}
iOptLen = sizeof(BOOL);
iResult = setsockopt(ListenSocket, SOL_SOCKET, SO_KEEPALIVE
, (char *)&boOptVal, iOptLen);
if (iResult != SOCKET_ERROR)
{
printf("Set SO_KEEPALIVE: ON\n");
}
iOptLen = sizeof(int);
iResult = getsockopt(ListenSocket, SOL_SOCKET, SO_KEEPALIVE
, (char *)&iOptVal, &iOptLen);
if (iResult != SOCKET_ERROR)
{
printf("SO_KEEPALIVE value: %ld\n", iOptVal);
}
closesocket(ListenSocket);
WSACleanup();
return 0;
}
|