使用 getsockopt()失败,求指导

#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();
错误码含义,网上找资料