#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
void ErrorHanding(char * message);
int main(int argc, char ** argv)
{
SOCKET tcp_sk , udp_sk;
int state , sock_type ,optlen;
WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2),&wsa) == -1)
ErrorHanding("WSAStartup() error !");
tcp_sk = socket(PF_INET,SOCK_STREAM,0);
if(tcp_sk == INVALID_SOCKET)
ErrorHanding("socket() for tcp error!");
udp_sk = socket(PF_INET,SOCK_DGRAM,0);
if(udp_sk == INVALID_SOCKET)
ErrorHanding("socket() for udp error!");
printf("SOCK_STREAM : %d\n",SOCK_STREAM);
printf("SOCK_DGRAM : %d\n",SOCK_DGRAM);
getsockopt()
state = getsockopt(tcp_sk,SOL_SOCKET,SO_TYPE,(char *)&sock_type,&optlen);
if(state)
ErrorHanding("getsockopt() error!");
printf("socket tcp_sk's type is : %s\n",((sock_type == SOCK_STREAM)?"SOCK_STREAM":"SOCK_DGRAM"));
state = getsockopt(udp_sk,SOL_SOCKET,SO_TYPE,(char *)&sock_type,&optlen);
if(state)
ErrorHanding("getsockopt() error!");
printf("socket udp_sk's type is : %s",((sock_type == SOCK_STREAM)?"SOCK_STREAM":"SOCK_DGRAM"));
closesocket(tcp_sk);
closesocket(udp_sk);
WSACleanup();
return 0;
}
void ErrorHanding(char * message)
{
fputs(message,stderr);
fputc('\n',stderr);
exit(1);
}
看套接字的书,有个例子
自己敲了下,getsockopt()返回总是失败,求指导
return 0;改成
return;试试
ErrorHanding那里把错误码打印出来,然后根据错误码去排查原因
获取错误码 int err = WSAGetLastError();
错误码含义,网上找资料