【轉】Windows下與Linux下編寫socket程序的區別(簡單區別,沒有異步socket,如select)

 

Windows下與Linux下編寫socket程序的區別

 

【【Windows】】

 

        【Windows: 頭文件的區別】        #include        #include

 

        【Windows: 初始化的區別】        WSADATA wsaData;        WSAStartup(0x202,&wsaData);

 

        【Windows: 聲明Socket】        SOCKET類型

 

        【Windows: Socket關閉】        closesocket()

 

        【Windows: Socket操作錯誤返回值】        SOCKET_ERROR

 

        【Windows: 設置socket非阻塞】        ioctlsocket(server_socket,FIONBIO,&ul);

 

        【Windows: WSA宏】        WSA相關的操作

 

        【Windows: Select()函數】        Select()函數的第一個參數無效,寫0就可以了。

 

        【Windows: 編譯連接】        Ws2_32.lib

 

        【Windows: 錯誤捕捉】        WSAGetLastError()

 

        【Windows: 異常處理】        沒有對send()的異常處理,最後一個參數無效,寫0就可以了。

 

 

 

=======================================================================================================

 

          

 

                                        

 

        【【Linux】】

 

        【Linux: 頭文件的區別】        #include        #include        #include        #include        #include        #include

 

        【Linux: 初始化的區別】        Do nothing.

 

        【Linux: 聲明Socket】        SOCKET類型在Linux中沒有定義,直接用int即可。

 

        【Linux: Socket關閉】        close()

 

        【Linux: Socket操作錯誤返回值】        在Linux中沒有定義,判斷socket操作是否成功可用返回值是否爲-1即可,可將SOCKET_ERROR聲明爲-1。

 

        【Linux: 設置socket非阻塞】        ioctlsocket在Linux中沒有定義,用fcntl替代即可,但要包含fcntl.h頭文件。        #include        ... ...        fcntl(server_socket,F_SETFL, O_NONBLOCK);

 

        【Linux: WSA宏】        WSA相關的操作在Linux不必要,直接去掉即可。

 

        【Linux: Select()函數】        Select()函數的第一個參數必須是後幾個參數用到的socket中,值最大的數(整型)加1。

 

        【Linux: 編譯連接】        連接是使用參數:-lstdc        運行時需要libstdc  .so.5,可在/usr/lib目錄中創建一個鏈接。

 

        【Linux: 錯誤捕捉】        #include        extern int errno;        int geterror(){return errno;}

 

        【Linux: 異常處理】        當連接斷開,還發數據的時候,不僅send()的返回值會有反映,而且還會像系統發送一個異常消息,如果不作處理,系統會出BrokePipe,程序會退出。爲此,send()函數的最後一個參數可以設MSG_NOSIGNAL,禁止send()函數向系統發送異常消息。 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章