91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

socket編程函數詳解

發布時間:2020-06-14 13:53:08 來源:網絡 閱讀:667 作者:程紅玲OOO 欄目:網絡安全

socket()

#include <sys/types.h>

#include <socket.h>

int socket(int domain,int type,int protocol)

返回值:成功返回一個文件描述符(注意,這個套接字不能用于和用戶進行通信,只能用于listen和accept客戶端的連接請求),失敗返回-1

參數

domain          

AF_INET             IPv4 Internet protocols  

type

SOCK_STREAM        可以提供測序、可靠的雙向,字節流

SOCK_DGRAM         支持數據報(無連接、不可靠消息的一個固定的最大長度)

protocol 

can be specified as 0


bind()

#include <sys/types.h>         

#include <sys/socket.h>

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

返回值:成功返回0,失敗返回-1

描述:

當創建一個套接字,它存在于一個名稱空間(家庭地址),但沒有地址分配給它。bind()將指定的地址賦給addr的套接字sockfd提到的文件描述符。addrlen,以字節為單位,指出通過addr的地址結構。傳統上,這個操作稱為“將一個名稱分配給一個套接字”。


#define __SOCKADDR_COMMON(sa_prefix) \
sa_family_t sa_prefix##family


struct sockaddr_in

  {

    __SOCKADDR_COMMON (sin_);

    in_port_t sin_port;         /* Port number.  */

    struct in_addr sin_addr;        /* Internet address.  */

  };


typedef uint32_t in_addr_t;

struct in_addr

  {

    in_addr_t s_addr;

  };


listen()

#include <sys/types.h>       

#include <sys/socket.h>

int listen(int sockfd, int backlog);

返回值:成功返回0,失敗返回-1

參數:

backlog

待辦事項列表參數定義等待連接的隊列的最大長度為sockfd可能增長。如果一個連接請求到達隊列滿時,客戶端可能會收到一個錯誤的指示ECONNREFUSED或者,如果底層協議支持重傳,請求可能會被忽略,這樣在連接成功后再嘗試。


accept()

#include <sys/types.h>        

#include <sys/socket.h>

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

描述:

accept()函數創建并返回了一個新的套接字client_sock,用于與客戶端通信。

假設一共有3個客戶端連接到服務器端。那么在服務器端就一共有4個套接字:第1個是socket()返回的、用于監聽的套接字;其余3個是分別調用3次accept()返回的不同的套接字。


send()

#include <sys/types.h>        

#include <sys/socket.h>

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

返回值:

>0   數據發送成功

<=0  發送失敗需要重試

參數:

前三個參數等同于write

sockfd:發送端套接字描述符;

buf:發送端的發送緩沖區,用來暫時存放要發送的數據;

len:要發送數據的長度;

第四個參數flag的參數值說明:

socket編程函數詳解

flag一般設為0

描述:

send先檢查發送端要發送數據的長度len和sockfd發送緩沖區的長度,如果len>sockfd發送緩沖區的長度,函數返回SOCKET_ERROR;

如果len<=發送端緩沖區的長度,send就先檢查協議是否正在發送 發送緩沖區的數據,如果協議正在發送數據,則send等待協議發完數據,如果此時協議還沒有開始發送sockfd發送緩沖區的數據或者該緩沖區為空,那么send就比較len和sockfd發送緩沖區剩下的長度;

如果len>sockfd發送緩沖區的剩余長度,send就等待協議把發送緩沖區上的數據發送完畢,如果len<發送緩沖區的剩余長度,send就把buf中的數據copy到sockfd發送緩沖區的剩余空間里;

如果send函數copy成功,則返回實際拷貝的字節數,否則返回SOCKET_ERROR;send函數把數據copy到sockfd發送緩沖區后就返回了,此時這些數據不一定被對端收到了(因為數據的傳輸是由協議來完成的,send在copy之后就返回了),如果協議在傳輸數據的過程中出現網絡錯誤的話,下一個send函數將出錯返回SOCKET_ERROR;

每一個send在copy數據的時候都要等待上一個數據被協議傳輸到連接的另一端,如果協議在傳輸數據的過程,網絡中斷或出現異常,send函數就會返回SOCKET_ERROR.


recv()

#include <sys/types.h>     

#include <sys/socket.h>

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

返回值:

<0  出錯

=0  對方關閉了連接

>0  接收到數據的字節數

參數:

前三個參數等同于read

sockfd:接收端套接字描述符

buf:接收端接收緩沖區,存放

len:buf的長度

第四個參數和send()的一樣,一般置為0


connect()

#include <sys/types.h>         

#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

參數:

sockfd:主動建立連接請求的套接字

addr:用來保存服務器端的端口號、ip地址

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

遂昌县| 昭通市| 饶河县| 汤阴县| 乌拉特中旗| 广水市| 南丹县| 奇台县| 新营市| 股票| 北川| 库伦旗| 个旧市| 花莲县| 化州市| 胶州市| 集贤县| 甘孜县| 通城县| 南皮县| 沙田区| 扶沟县| 斗六市| 广昌县| 五台县| 南阳市| 太白县| 鄂尔多斯市| 蒲江县| 运城市| 新宁县| 罗定市| 江口县| 富宁县| 钟山县| 阆中市| 英德市| 平和县| 开原市| 扶风县| 湖口县|