1.sockaddr_in结构体
int do_listen()
{
struct sockaddr_in server;
int ss = -1;
int err = -1; //错误编号
int reuse = 1;
int ret = -1; //返回值
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.s_addr=htonl(INADDR_ANY);
server.sin_port = htons(conf_para.ListenPort); //整形变量--本地字节序-》网络字节序
signal(SIGINT, sig_int); //程序终止信号
signal(SIGPIPE, sig_pipe); //
ss = socket (AF_INET, SOCK_STREAM, 0); //监听套接字
if (ss == -1) //创建失败
{
printf("socket() error\n");
ret = -1;
goto EXITshttpd_listen;
}
err = setsockopt (ss, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));
if (err == -1)
{
printf("setsockopt SO_REUSEADDR failed\n");
}
err = bind (ss, (struct sockaddr*) &server, sizeof(server)); //绑定server
if (err == -1)
{
printf("bind() error\n");
ret = -2;
goto EXITshttpd_listen;
}
err = listen(ss, conf_para.MaxClient*2); //开始监听
if (err)
{
printf ("listen() error\n");
ret = -3;
goto EXITshttpd_listen;
}
ret = ss;
EXITshttpd_listen:
return ret;
}