win32 linux下網路程式設計十點需要注意的地方

2021-06-20 16:08:56 字數 1914 閱讀 5764

書上看到的,有幾點覺得還是值得注意。

1、標頭檔案

win32: #include

linux: #include

2、關閉

win32: closescoket(s);

linux: close(fd);

3、在nonblocking模式下呼叫connect,大部分返回

win32: wsaewouldblock

linux: einprogress

表示正在連線

4、scokadrr的長度單位

win32: int

linux: socklent_t

5、獲取當前執行執行緒上的錯誤

win32: wsagetlasterror()

linux: errno

6、控制i/o模式函式

win32: ioctlsocket()

linux: ioctl();

7**、對於nonblocking模式下呼叫connect後的成功判定。

win32: 呼叫select()時,該socket處理writefds中,並且不在exceptfds中,就表示連線成功。

linux: a連線成功時,該socket可寫;b連線建立錯誤時,該socket即可讀也可寫。

解決方式是:當發現soket可寫時,呼叫getsockopt()檢測是否有錯誤發生。

bool foo()

return ret; }

8**、對已經關閉的soket呼叫send()

win32: 返回錯誤,沒其他後果。

linux: 產生訊號sigpipe,linux對該訊號的預設操作是關閉程序

解決方法:預先註冊sigpipe訊號,

#include

void sig_pipe(int signal)

在程式啟動時,進行註冊

signal(sigpipe, sig_pipe);

9**、在監聽socket設定了nonblocking模式下,通過accept()產生的新的soket問題

win32: 會繼承監聽socket的屬性

linux: 不會繼承,必須手動設定nonblocking模式,setnonblocking(int fd);

10**、linux下,如果乙個程序幫定某個port,那當程序結束時,該port仍然會被繼續占用幾十秒,在這段時間內嘗試對該port的繫結都會返回失敗。

解決方法:呼叫setsockopt()啟用so_reuseraddr屬性

bool foo()

return ret; }

socket相關程式從windows移植到linux下需要注意的

1。標頭檔案

windows下winsock.h/winsock2.h

linux下sys/socket.h

2。初始化

windows下需要用wsastartup

linux下不需要

3。關閉socket

windows下closesocket(...)

linux下close(...)

4。型別

windows下socket

linux下int

5。獲取錯誤碼

windows下getlasterror()/wsagetlasterror()

linux下errno變數

6。設定非阻塞

windows下ioctlsocket()

linux下fcntl()

7。send函式最後乙個引數

windows下一般設定為0

linux下最好設定為msg_nosignal,如果不設定,在傳送出錯後有可 

能會導致程式退出。

8。毫秒級時間獲取

windows下gettickcount()

linux下gettimeofday()

win32 linux 只啟動乙個程序

windows oninitdialog handle m hmutex createmutex null,true,t szsel2collecter if getlasterror error already exists linux 下面用檔案鎖實現程序只能開啟單個例項,win32 用crea...

Linux下網路程式設計實驗

1 tcp程式設計 伺服器端tcp server.c include include include include include include include include define portnumber 3333 int main int argc,char argv 伺服器端填充 s...

Linux下網路程式設計(一)

一,計算機與網路的發展 計算機與網路發展的7個階段 1.批處理 20世紀50年代 是指實現將使用者個資料裝入卡帶或者磁帶。並有計算機按照一定的順序讀取,是使用者索要執行的這些程式和資料能夠一併批量得到處理的方式。2.分時系統 20世紀60年代 是指多個終端 包含滑鼠 鍵盤 顯示器等輸入輸出裝置組成,...