參考鏈接:
相關(guān)記錄
相關(guān)頭文件
#include <arpa/inet.h>fctl
<code>//return fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK);
int flag = 1;
return ioctlsocket(fd, FIONBIO, (unsigned long *)&flag);
</code>線程相關(guān)
unix:
#include <pthread.h>
windows:
#include <process.h>
信號量:
unix:
sem_t
sem_init();
sem_wait();
sem_post();
windows:
Handle
CreateSemaphore();
WaitForSingleObject();
ReleaseSemaphore();
線程庫:
http://blog.csdn.net/yuyu2223/article/details/7632252
- sys/time
windows沒有相關(guān)頭部;相關(guān)time 為winsock2.h疆拘;
gettimeofday 需要自己重新寫啰脚,windows未提供相關(guān)實現(xiàn)氏涩;
linux sleep函數(shù)單位為1s;windows Sleep為 1ms;
5.socket
1)頭文件 windows下winsock.h/winsock2.h linux下sys/socket.h 錯誤處理:errno.h
2)初始化 windows下需要用WSAStartup linux下不需要
3)關(guān)閉socket windows下closesocket(...) linux下close(...)
4)類型 windows下SOCKET linux下int 如我用到的一些宏: #ifdef WIN32 typedef int socklen_t; typedef int ssize_t; #endif #ifdef LINUX typedef int SOCKET; typedef unsigned char BYTE; typedef unsigned long DWORD; #define FALSE 0 #define SOCKET_ERROR (-1) #endif
5)獲取錯誤碼 windows下getlasterror()/WSAGetLastError() linux下errno變量
6)設(shè)置非阻塞 windows下ioctlsocket() linux下fcntl() <fcntl.h>
7)send函數(shù)最后一個參數(shù) windows下一般設(shè)置為0 linux下最好設(shè)置為MSG_NOSIGNAL唧领,如果不設(shè)置处嫌,在發(fā)送出錯后有可 能會導致程序退出而涉”颗瘢
8)毫秒級時間獲取 windows下GetTickCount() linux下gettimeofday()
其他細節(jié)
windows.h先于winsock2.h
包含順序不同 會造成很多errorwindows 不支持strsep,用strok替換瞳秽;
3.\ #define inline __inline
不同類型的基類 -- 重復定義錯誤;
a)很有可能是強制類型轉(zhuǎn)換出現(xiàn)問題率翅,gcc c編譯不會出現(xiàn)類似問題练俐,但是vs2013 c++編譯器會報出該類問題;
b)與庫文件同名
c)未在調(diào)用前申明冕臭;random()只能在gcc環(huán)境腺晾;
windows使用 srand 產(chǎn)生種子,然后使用rand()函數(shù)snprintf --- sprintf_s
#define strcasecmp stricmp
#define strncasecmp strnicmp
LNK2005: ___xi_z 已經(jīng)在 MSVCRTD.lib(cinitexe.obj) 中定義
鏈接器->輸入->忽略特定庫: libcmt.lib推薦使用函數(shù) error(比如 sprintf 編譯報錯辜贵,需要使用 sprintf_s) 去掉error:
項目屬性-->配置屬性-->C/C++-->命令行 其他選項: /D _CRT_SECURE_NO_WARNINGS[無法啟動此程序悯蝉,因為計算機中丟失pthreadVC2.dll]
64位系統(tǒng)應將pthreadVC2.dll復制到C:\Windows\SysWOW64中無法查找或打開 PDB 文件
http://jingyan.baidu.com/article/90bc8fc87fbafff653640ca6.html網(wǎng)絡(luò)請求異步 connect 返回-1 errno 為 EINPROGRESS
windows 需要查找網(wǎng)絡(luò)錯誤狀態(tài),并判斷 類型windows socket 不能使用write 和 read
vs2013引入調(diào)用堆棧功能托慨;
調(diào)試--》窗口--》調(diào)用堆棧
點擊debug,然后程序asset 點擊重試鼻由,點擊ok 就會有調(diào)用堆棧;libevnet event_base_dispatch 異常退出
查找原因:
猜想一:其他libevent 導致厚棵;修改其他libevent 為同步蕉世,還是會觸發(fā)該問題;所以并不是其他libevent
猜想二:libevent本身退出機制有問題或者刪除事件有問題婆硬;libevent 一直有 妄妄妄妄妄... 輸出
recv buf 初始值都是 妄.... 輸出有問題 沒初始化導致
17.vs2013寫文件 權(quán)限不夠
修改文件夾安全選項
- libevent 有問題狠轻;定時器不會觸發(fā)(proxy主線程),事件不觸發(fā)(控制線程)
19.post add event 有問題 暫不知哪里問題彬犯; 并不是 其他線程觸發(fā)post問題向楼; read local file導致問題,去掉read localfile
now 為 負
peer addr 為0 解決谐区;
session is closed! transmit_alc2tcp
臨時調(diào)整湖蜕,now 修改為unsigned
判斷session closed 地方注釋掉