现在的位置: 首页 > 综合 > 正文

socket在windows和linux下的区别

2012年06月18日 ⁄ 综合 ⁄ 共 972字 ⁄ 字号 评论关闭

 

socket
Windows
Linux
头文件
winsock.h/winsock2.h
sys/socket.h
错误处理:errno.h
socket类型
SOCKET 
int
初始化
windows下需要用WSAStartup
WSADATA wsaData;
 err = WSAStartup(0x202,&wsaData);
    if ( err != 0 )
    {
        return 0;
    }
    else if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion )
!= 2 ) //检测是否支持这个版本的socket
    {
        WSACleanup( );
        return 0;
    }
不需要
逆初始化
WSACleanup();
不需要
打开socket
socket(...)
socket(...)
关闭socket
closesocket(...)
close(...) 
获取错误吗
WSAGetLastError() 
extern int errno;
int geterror(){return errno;}

 
设置非阻塞 
ioctlsocket(server_socket,FIONBIO,&ul);     int ul = 1
fcntl(server_socket,F_SETFL, O_NONBLOCK); <fcntl.h>

 
send函数最后一个参数
windows下一般设置为0
必须是后几个参数用到的socket中,值最大的数(整型)加1 (另一种说法是设置为MSG_NOSIGNAL)
毫秒级时间获取 
GetTickCount() 
gettimeofday() 
Socket操作错误返回值
SOCKET_ERROR
SOCKET_ERROR
异常处理
没有对send()的异常处理,最后一个参数无效,写0就可以了
当连接断开,还发数据的时候,不仅send()的返回值会有反映,而且还会像系统发送一个异常消息,如果不作处理,系统会出BrokePipe,程序会退出。为此,send()函数的最后一个参数可以设置MSG_NOSIGNAL,禁止send()函数向系统发送异常消息。
编译连接
ws2_32.lib
连接是使用参数:-lstdc
运行时需要libstdc++.so.5,可在/usr/lib目录中创建一个链接。

抱歉!评论已关闭.