Socket相關程式:從Windows移植到Linux
socket相關程式從windows移植到linux下需要注意的
<wbr>Linux Socket程式設計中的shutdown和close<br> 1,只要TCP棧的讀緩衝裡還有未讀取(read)資料,則呼叫close時會直接向對端傳送RST。<br> 2,shutdown與socket描述符沒有關係,即使呼叫shutdown(fd, SHUT_RDWR)也不會關閉fd,最終還需close(fd)。<br> 3,可以認為shutdown(fd, SHUT_RD)是空操作,因為shutdown後還可以繼續從該socket讀取資料,這點也許還需要進一步證實。<br> 4,在已傳送FIN包後write該socket描述符會引發EPIPE/SIGPIPE。<br> 5,當有多個socket描述符指向同一socket物件時,呼叫close時首先會遞減該物件的引用計數,計數為0時才會傳送FIN包結束TCP連線。shutdown不同,只要以SHUT_WR/SHUT_RDWR方式呼叫即傳送FIN包。<br> 6,SO_LINGER與close,當SO_LINGER選項開啟但超時值為0時,呼叫close直接傳送RST(這樣可以避免進入TIME_WAIT狀態,但破壞了TCP協議的正常工作方式),SO_LINGER對shutdown無影響。<br> 7,TCP連線上出現RST與隨後可能的TIME_WAIT狀態沒有直接關係,主動發FIN包方必然會進入TIME_WAIT狀態,除非不傳送FIN而直接以傳送RST結束連線。<br></wbr>
<wbr></wbr>
1)標頭檔案
windows下winsock.h/winsock2.h
linux下sys/socket.h
錯誤處理:errno.h
<wbr></wbr>
2)初始化
windows下需要用WSAStartup
linux下不需要
<wbr></wbr>
3)關閉socket
windows下closesocket(...)
linux下close(...)
<wbr></wbr>
4)型別
windows下SOCKET
linux下int
如我用到的一些巨集:
#ifdef WIN32
typedef int socklen_t;
typedef int ssize_t;
#endif
<wbr></wbr>
#ifdef __LINUX__
typedef int SOCKET;
typedef unsigned char BYTE;
typedef unsigned long DWORD;
#define FALSE 0
#define SOCKET_ERROR (-1)
#endif
<wbr></wbr>
5)獲取錯誤碼
windows下getlasterror()/WSAGetLastError()
linux下errno變數
<wbr></wbr>
6)設定非阻塞
windows下ioctlsocket()
linux下fcntl()
<wbr></wbr>
7)send函式最後一個引數
windows下一般設定為0
linux下最好設定為MSG_NOSIGNAL,如果不設定,在傳送出錯後有可能會導致程式退出。
<wbr></wbr>
8)毫秒級時間獲取
windows下GetTickCount()
linux下gettimeofday()
<wbr></wbr>
多執行緒
多執行緒: (win)process.h --〉(linux)pthread.h
_beginthread --> pthread_create
_endthread --> pthread_exit
相關文章
- 從Windows到LinuxWindowsLinux
- kettle工具從windows移植到linux上啟動報錯:\karaf/deploy does not existWindowsLinux
- 將 Win32 程式移植到 LinuxWin32Linux
- 把成熟的程式碼從.NET移植到MonoMono
- Windows下程式向Linux下移植細節WindowsLinux
- 移植到Windows CE 的經驗Windows
- Windows API 程式相關筆記WindowsAPI筆記
- [Linux]——程式管理相關Linux
- alsa 移植到Linux3.0Linux
- Linux 根檔案系統的移植(從入門到精通)Linux
- 如何將三萬行程式碼從Flow移植到TypeScript?行程TypeScript
- Socket程式設計,從TCP分析到建立web網站程式設計TCPWeb網站
- 從linux接入到windows遠端桌面LinuxWindows
- 將 Linux 應用程式移植到 64 位系統上Linux
- web工程從TOMCAT移植到JBOSS中WebTomcat
- 傳輸表空間(從Linux到Windows)LinuxWindows
- 理解socket.io(一)---相關的APIAPI
- Solaris到Linux應用的移植(轉)Linux
- Vulkan移植GpuImage(三)從A到C的濾鏡GPUUI
- 關於WINDOWS平臺下RMAN備份移植Windows
- 從HTML5 WebSocket到Socket.ioHTMLWeb
- 如何從 Windows 上用 SSH 連線到 LinuxWindowsLinux
- 利用RMAN把ORACLE從WINDOWS轉換到LINUXOracleWindowsLinux
- Windows 程式設計簡介從C/C++到Windows程式設計Windows程式設計C++
- Vulkan移植GpuImage(四)從D到O的濾鏡GPUUI
- Vulkan移植GPUImage(五)從P到Z的濾鏡GPUUI
- Linux相關Linux
- 【原創】EtherCAT主站IgH解析(二)-- 如何將Igh移植到Linux/Windows/RTOS等多作業系統移植指南LinuxWindows作業系統
- linux Socket 程式設計Linux程式設計
- 【linux】Linux程式相關知識學習整理Linux
- 使用sftp從獲取 linux 下的文件到windowsFTPLinuxWindows
- Linux下程式相關:fork(),wait(),exec()LinuxAI
- Linux 程式和網路埠相關命令Linux
- 從 Linux 原始碼看 socket 的 closeLinux原始碼
- 把 Linux 移植到蘋果 M1 Mac 上Linux蘋果Mac
- Windows下程式向Linux下移植實踐2-草原之狼-搜狐部落格WindowsLinux
- Linux 相關2Linux
- 如何將 Google Auto Draw 移植到小程式上Go