1 sockaddr_in、sockaddr_in6和sockadd_un等都可以強制轉換為sockaddr. 2 IP地址是電分十進位形式的字元串,但是在網路中使用的是unsigned int類型的數才能使用。 3 函數listen, 第二個參數backlog,表示內核監聽隊列的最大長度,如果超過 ...
1 sockaddr_in、sockaddr_in6和sockadd_un等都可以強制轉換為sockaddr.
2 IP地址是電分十進位形式的字元串,但是在網路中使用的是unsigned int類型的數才能使用。
- in_addr_t inet_addr(const char* strptr); 返回的是ipv4的usigned int類型的地址。
- int inet_aton(const char* cp, struct in_addr* inp); 如果成功返回非零,不成功返回零
- char* inet_ntoa();如果失敗返回NULL,如果成功返回正確的點分十進位地址。
- int net_pton(int af, const char* src, void* dst); 點分十進位轉換成網路地址。適用於ipv4和ipv6
- const char* inet_ntop(int af, const void* src, char* dst, socklen_t cnt); 網路地址轉換成點分十進位地址。適用於ipv4和ipv6
3 函數listen, 第二個參數backlog,表示內核監聽隊列的最大長度,如果超過了設定值+1的數量(在windows下測試是超過設定值的連接,就會連接不上),則伺服器將不受理新的客戶連接。只要不accept,內核隊列中的監聽到的socket數量不會減少.
4 close: 當我們關閉連接時,使用close,其實只是將文件描述符的引用計數減1,一次fork會使父進程中打開的問見描述符引用計數加1,所以在這種情況下我們應該對父子進程中的文件描述符都執行一次close.如果想要直接終止連接,可以使用shutdown函數,參數howto的取值分別為shut_rd, shut_wr和shut_rdwr。
5 msg_oob數據。send和recv函數可以設置消息選項,當設置為緊急數據時(msg_oob),只能有一個位元組緊急數據,如果發送的消息是多位元組消息,只有最有一個位元組是緊急數據。
6 udp發送數據使用sendmsg, 接收數據使用recvmsg,跟send和recv差不多,只不過是socket地址結構的參數。這兩個函數也可以用於tcp,用於tcp時,將後面兩個參數設置為null即可。