C說話中socket相干收集編程函數小結。本站提示廣大學習愛好者:(C說話中socket相干收集編程函數小結)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中socket相干收集編程函數小結正文
C說話socket()函數:樹立一個socket通訊
頭文件:
#include <sys/types.h> #include <sys/socket.h>
界說函數:
int socket(int domain, int type, int protocol);
函數解釋:socket()用來樹立一個新的socket, 也就是向體系注冊, 告訴體系樹立一通訊端口. 參數domain 指定應用何種的地址類型, 完全的界說在/usr/include/bits/socket.h 內, 底下是罕見的協定:
PF_UNIX/PF_LOCAL/AF_UNIX/AF_LOCAL UNIX 過程通訊協定
PF_INET?AF_INET Ipv4 收集協定
PF_INET6/AF_INET6 Ipv6 收集協定
PF_IPX/AF_IPX IPX-Novell 協定
PF_NETLINK/AF_NETLINK 焦點用戶接口裝配
PF_X25/AF_X25 ITU-T X. 25/ISO-8208 協定
PF_AX25/AF_AX25 專業無線AX. 25 協定
PF_ATMPVC/AF_ATMPVC 存取原始 ATM PVCs
PF_APPLETALK/AF_APPLETALK appletalk (DDP)協定
PF_PACKET/AF_PACKET 低級封包接口
參數 type 有以下幾種數值:
1、SOCK_STREAM 供給雙向持續且可托賴的數據流, 即TCP. 支撐 OOB 機制, 在一切數據傳送前必需應用connect()來樹立連線狀況.
2、SOCK_DGRAM 應用不持續弗成信任的數據包銜接
3、SOCK_SEQPACKET 供給持續可托賴的數據包銜接
4、SOCK_RAW 供給原始收集協定存取
5、SOCK_RDM 供給可托賴的數據包銜接
6、SOCK_PACKET 供給和收集驅動法式直接通訊. protocol 用來指定socket 所應用的傳輸協定編號, 平日此參考不消管它, 設為0 便可.
前往值:勝利則前往socket 處置代碼, 掉敗前往-1.
毛病代碼:
1、EPROTONOSUPPORT 參數domain 指定的類型不支撐參數type 或protocol 指定的協定
2、ENFILE 焦點內存缺乏, 沒法樹立新的socket 構造
3、EMFILE 過程文件表溢出, 沒法再樹立新的socket
4、EACCESS 權限缺乏, 沒法樹立type 或protocol 指定的協定
5、ENOBUFS/ENOMEM 內存缺乏
6、EINVAL 參數domain/type/protocol 不正當
C說話connect()函數:樹立socket連線
頭文件:
#include <sys/types.h> #include <sys/socket.h>
界說函數:
int connect(int sockfd, struct sockaddr * serv_addr, int addrlen);
函數解釋:connect()用來將參數sockfd 的socket 連至參數serv_addr 指定的收集地址. 構造sockaddr請參考bind(). 參數addrlen 為sockaddr 的構造長度.
前往值:勝利則前往0, 掉敗前往-1, 毛病緣由存於errno 中.
毛病代碼:
1、EBADF 參數sockfd 非正當socket 處置代碼
2、EFAULT 參數serv_addr 指針指向沒法存取的內存空間
3、ENOTSOCK 參數sockfd 為一文件描寫詞, 非socket.
4、EISCONN 參數sockfd 的socket 已經是連線狀況
5、 ETIMEDOUT 妄圖連線的操作跨越限制時光仍未有呼應.
6、ENETUNREACH 沒法傳送數據包至指定的主機.
7、EAFNOSUPPORT sockaddr 構造的sa_family 不准確.
8、EALREADY socket 為弗成阻斷且先前的連線操作還未完成.
C說話accept()函數:接收socket連線
頭文件:
#include <sys/types.h> #include <sys/socket.h>
界說函數:
int accept(int s, struct sockaddr * addr, int * addrlen);
函數解釋:accept()用來接收參數s 的socket 連線. 參數s 的socket 必須先經bind()、listen()函數處置過, 當有連線出去時accept()會前往一個新的socket 處置代碼, 往後的數據傳送與讀取就是經過新的socket處置, 而本來參數s 的socket 能持續應用accept()來接收新的連線請求. 連線勝利時, 參數addr 所指的構造會被體系填入長途主機的地址數據, 參數addrlen 為scokaddr 的構造長度. 關於機構sockaddr 的界說請參考bind().
前往值:勝利則前往新的socket 處置代碼, 掉敗前往-1, 毛病緣由存於errno 中.
毛病代碼:
1、EBADF 參數s 非正當socket 處置代碼.
2、EFAULT 參數addr 指針指向沒法存取的內存空間.
3、ENOTSOCK 參數s 為一文件描寫詞, 非socket.
4、EOPNOTSUPP 指定的socket 並不是SOCK_STREAM.
5、EPERM 防火牆謝絕此連線.
6、ENOBUFS 體系的緩沖內存缺乏.
7、ENOMEM 焦點內存缺乏.