Linux 網路程式設計詳解十一

2021-09-07 08:06:00 字數 2564 閱讀 4468

/*

* * read_timeout - 讀超時檢測函式,不含讀操作

* @fd:檔案描述符

* @wait_seconds:等待超時秒數,如果為0表示不檢測超時

* 成功返回0,失敗返回-1,超時返回-1並且errno = etimedout

* */

int read_timeout(int fd, unsigned int

wait_seconds)

while (ret == -1 && errno ==eintr);

//ret==-1時,返回的ret正好就是-1

if (ret == 0

)

else

if (ret == 1

)

}return

ret;

}

/*

* * write_timeout - 寫超時檢測函式,不含寫操作

* @fd:檔案描述符

* @wait_seconds:等待超時秒數,如果為0表示不檢測超時

* 成功返回0,失敗返回-1,超時返回-1並且errno = etimedout

* */

int write_timeout(int fd, unsigned int

wait_seconds)

while (ret == -1 && errno ==eintr);

if (ret == 0

)

else

if (ret == 1

)

}return

ret;

}

/*

* * accept_timeout - 帶超時accept (方法中已執行accept)

* @fd:檔案描述符

* @addr:位址結構體指標

* @wait_seconds:等待超時秒數,如果為0表示不檢測超時

* 成功返回已連線的套接字,失敗返回-1,超時返回-1並且errno = etimedout

* */

int accept_timeout(int fd, struct sockaddr_in *addr, unsigned int

wait_seconds)

while (ret == -1 && errno ==eintr);

if (ret == -1

)

else

if (ret == 0

)

//成功無需處理,直接往下執行

}

//一旦檢測出select有事件發生,表示有三次握手成功的客戶端連線到來了

//此時呼叫accept不會被阻塞

if (addr !=null)

else

return

ret;

}

/*

* * activate_nonblock - 設定套接字非阻塞

* @fd:檔案描述符

* 成功返回0,失敗返回-1

* */

int activate_nonblock(int

fd)/*

* * deactivate_nonblock - 設定套接字阻塞

* @fd:檔案描述符

* 成功返回0,失敗返回-1

* */

int deactivate_nonblock(int

fd)/*

* * connect_timeout - 帶超時的connect(方法中已執行connect)

* @fd:檔案描述符

* @addr:位址結構體指標

* @wait_seconds:等待超時秒數,如果為0表示不檢測超時

* 成功返回0.失敗返回-1,超時返回-1並且errno = etimedout

* */

int connect_timeout(int fd, struct sockaddr_in *addr, unsigned int

wait_seconds)

ret = connect(fd, (struct sockaddr *) addr, sizeof(struct

sockaddr));

if (ret == -1 && errno ==einprogress)

while (ret == -1 && errno ==eintr);

//ret==-1 不需要處理,正好給ret賦值

//select()報錯,但是此時不能退出當前connect_timeout()函式

//因為還需要取消檔案描述符的非阻塞

if (ret == 0

)

else

if (ret == 1

)

//說明套接字沒有發生錯誤,成功

} }

if (wait_seconds > 0

)

return

ret;

}

Linux 網路程式設計詳解九

tcp ip協議中sigpipe訊號產生原因 1.假設客戶端socket套接字close 會給伺服器傳送位元組段fin 2.伺服器接收到fin,但是沒有呼叫close 因為socket有快取區,所以伺服器仍然可以向客戶端傳送資料。3.如果這種狀態下伺服器向客戶端傳送資料,將會引起tcp ip協議進行...

Linux 網路程式設計詳解十二

udp的特點 無連線 基於訊息的資料傳輸服務 不可靠 udp更加高效 udp注意點 udp報文可能會丟失,重複 udp報文可能會亂序 udp缺乏流量控制 udp緩衝區寫滿之後,沒有流量控制,會覆蓋緩衝區 udp協議資料報文截斷 如果接收到的資料報文大於緩衝區,報文可以被截斷,後面部分丟失 recvf...

Linux 網路程式設計常用函式詳解

sendto 經socket傳送資料 相關函式 send sendmsg,recv recvfrom socket 表頭檔案 include sys types.h include sys socket.h 定義函式 int sendto int s const void msg,int len,u...