書上看到的,有幾點覺得還是值得注意。
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年代 是指多個終端 包含滑鼠 鍵盤 顯示器等輸入輸出裝置組成,...