如何在c語(yǔ)言下關(guān)閉socket
c語(yǔ)言關(guān)閉socket的兩種方式
一、shutdown()
#include<sys/socket.h> int shutdown(int sockfd,int how);
how的方式有三種分別是
SHUT_RD(0):關(guān)閉sockfd上的讀功能,此選項(xiàng)將不允許sockfd進(jìn)行讀操作。不允許接受。
SHUT_WR(1):關(guān)閉sockfd的寫功能,此選項(xiàng)將不允許sockfd進(jìn)行寫操作。不允許發(fā)送。
SHUT_RDWR(2):關(guān)閉sockfd的讀寫功能。不允許發(fā)送和接受(和 close() 一樣)。
成功則返回0,錯(cuò)誤返回-1,錯(cuò)誤碼errno:EBADF表示sockfd不是一個(gè)有效描述符;ENOTCONN表示sockfd未連接;ENOTSOCK表示sockfd是一個(gè)文件描述符而不是socket描述符。
二、close()
#include<unistd.h> int close(int fd);
關(guān)閉讀寫。它將防止套接字上更多的數(shù)據(jù)的讀寫。任何在另一端讀寫套接字的企 圖都將返回錯(cuò)誤信息。
成功則返回0,錯(cuò)誤返回-1,錯(cuò)誤碼errno:EBADF表示fd不是一個(gè)有效描述符;EINTR表示close函數(shù)被信號(hào)中斷;EIO表示一個(gè)IO錯(cuò)誤。
區(qū)別:
1、shutdown()在如何關(guān)閉套接字上有多一點(diǎn)的控制。shutdown 可以單向關(guān)閉,Close不可以。
2、當(dāng)多線程共享/調(diào)用同一個(gè)Socket時(shí),Close只是會(huì)減1,直到減到0才會(huì)真正去關(guān)閉Socket,
而shutdown則不會(huì)理會(huì)有多少線程在用,強(qiáng)制直接關(guān)閉socket.
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言每日練習(xí)之求兩個(gè)矩陣的乘積詳解
這篇文章主要介紹了如何求兩個(gè)矩陣的乘積,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言鏈表的實(shí)現(xiàn)介紹
大家好,本篇文章主要講的是數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言鏈表的實(shí)現(xiàn)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2021-12-12C語(yǔ)言使用openSSL庫(kù)DES模塊實(shí)現(xiàn)加密功能詳解
這篇文章主要介紹了C語(yǔ)言使用openSSL庫(kù)DES模塊實(shí)現(xiàn)加密功能,簡(jiǎn)單講解了DES加密的相關(guān)概念,并結(jié)合實(shí)例形式分析了DES加密的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-05-05c++調(diào)用實(shí)現(xiàn)yolov5轉(zhuǎn)onnx介紹
大家好,本篇文章主要講的是c++調(diào)用實(shí)現(xiàn)yolov5轉(zhuǎn)onnx介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12c++創(chuàng)建二維動(dòng)態(tài)數(shù)組與內(nèi)存釋放問(wèn)題
這篇文章主要介紹了c++創(chuàng)建二維動(dòng)態(tài)數(shù)組與內(nèi)存釋放問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06