網絡編程的一些函數

#include <sys/types.h>
#include <sys/socket.h>
函數原型:(建立一個套接口)
int socket(int family,    // 協議類型,通常爲AF_INET服務器

               int type,      // socket類型:SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET網絡

               int protocol  // 用來指定socket所使用的傳輸協議編號,一般設爲0便可,表示缺省socket

               );                // 若無錯誤發生,socket()返回引用新套接口的描述字; 不然,返回INVALID_SOCKET錯誤函數

 

#include <sys/types.h>      ui

#include <sys/socket.h>指針

函數原型:(經過給一個未命名套接口分配一個本地名字來爲套接口創建本地捆綁(主機地址/端口號))
server

int bind(int sockfd,                          // socket描述符htm

            struct sockaddr *my_addr,  // 是一個指向包含有本機ip地址和端口號等信息的sockaddr類型的指針接口

            int addrlen                        // 常被設爲sizeof(struct sockaddr)隊列

           );                                      // 返回:成功返回0,失敗返回-1

 

#include <sys/socket.h>

函數原型:(建立一個套接字並監聽申請的鏈接。僅適用於支持鏈接的套接口,如SOCK_STREAM類型的)

int listen(int sockfd,    // socket()系統調用返回的socket描述符

             int backlog   // 指定在請求隊列中的最大請求數,進入的鏈接請求將在隊列中等待accept()它們。

             );                // 如無錯誤發生,返回0;不然返回-1

 

#include <sys/types.h>

#inlcude <sys/socket.h>
函數原型:(在一個套接口接受一個鏈接)

int accept(int sockfd,     // 是被監聽的socket描述符

               void *addr,   // 一般是一個指向sockaddr_in變量的指針,該變量用來存放提出鏈接請求服務的主機的信息

               int addrlen   // sizeof(struct sockaddr_in) 

               );                // 成功則返回一個socket實例,server纔可以和client進行通訊;錯誤則返回INVALID_SOCKET錯誤

 

#include <sys/types.h>  

#include <sys/socket.h>

函數原型:(用於創建與指定socket的鏈接)

int connect(int sockfd,                             // 目的服務器的socket描述符

                 struct sockaddr *serv_addr,    // 包含目的機器ip地址和端口號的指針

                 int addrlen                            // addrlen:sizeof(struct sockaddr)

                );                                          // 若無錯誤發生,則connect()返回0。不然的話,返回SOCKET_ERROR錯誤(通常小於0)

 

#include <sys/socket.h>
函數原型:(用於向一個已經鏈接的socket發送數據)
int send(int sockfd,             // 用來傳輸數據的socket描述符

            const void *msg,    // 要發送數據的指針(緩衝區)

            int len,                  // 發送數據的長度

            int flags                // 調用執行方式,通常爲0

           );                          // 若是無錯誤,返回值爲所發送數據的總數,不然返回SOCKET_ERROR。

 

#include <sys/types.h>

#include <sys/socket.h>

函數原型:(用於接收一個已經鏈接的socket發送的數據)
int recv(int sockfd,              // 接收數據的socket描述符

           void *buf,               // 存放數據的緩衝區

           int len,                   // 緩衝的長度

           unsigned int flags    // 調用執行方式,通常爲0

          );                            // 若無錯誤發生,recv()返回讀入的字節數;若是鏈接已停止,返回0;不然返回SOCKET_ERROR錯誤。

 

read() write()
       int read(int fd, char *buf, int len);  // 成功返回讀取的字節數;出錯返回-1並設置errno;若是在調read以前已到達文件末尾,則此次read返回0。
       int write(int fd, char *buf, int len);

 

shutdown()
       close(sockfd)
       int shutdown(int sockfd, int how)

 

#include <sys/socket.h>

ssize_t recvfrom(int sockfd, void *buf, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen);

ssize_t sendto(int sockfd, const void *buff, size_t nbytes, int flags, const struct sockaddr *to, socklen_t *addrlen);

// 成功則返回讀、寫的字節數,出錯則爲-1。

第一個參數sockfd:描述符;

第二個參數buff:指向讀入或寫出的緩衝區的指針;

第三個參數nbytes:讀寫字節數;

第四個參數flags:調用操做方式;

第五個參數from/to:指向數據報發送者或接收者的協議地址(如IP地址和端口號)的套接字地址結構;

第六個參數addrlen:from/to參數的大小。

 

int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);  // 獲取與某個套接字關聯的本地協議地址

int getpeername(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);  // 獲取與某個套接字關聯的外地協議地址

 

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int inet_aton(const char *string, struct in_addr*addr);  // 字符串有效返回1,不然返回0
int inet_pton(int af, const char *src, void *dst);  // 將「點分十進制」字符串 -> 「二進制整數」  參數af爲AF_INET或AF_INET6
 
char* inet_ntoa(struct in_addr in);  // 返回點分十進制字符串
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt); 
 
struct in_addr {
    in_addr_t s_addr;
};
結構體in_addr 用來表示一個32位的IPv4地址。
in_addr_t 通常爲 32位的unsigned int,其字節順序爲網絡順序,即該無符號整數採用大端字節序。
其中每8位表明一個IP地址位中的一個數值。

 

#include <sys/select.h>

int select(int maxfdpl, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout);
maxfdpl:   是一個整數值,是指集合中全部 文件描述符的範圍,即全部文件描述符的最大值加1。
readset:   (可選)指針,指向一組等待可讀性檢查的套接口。
writeset:  (可選)指針,指向一組等待可寫性檢查的套接口。
exceptset:(可選)指針,指向一組等待錯誤檢查的套接口。
timeout:    select()最多等待時間,對阻塞操做則爲NULL。
函數返回:如有就緒描述符則爲其數目;超時則爲0;出錯則爲-1(如捕獲到中斷信號)。

 

#include <sys/epoll.h>
int epoll_create(int size);  
// 建立一個epoll的句柄(epoll專用的文件描述符),size用來告訴內核這個監聽的數目一共有多大。這個參數不一樣於select()中的第一個參數,給出最大監聽的fd+1的值。
int epoll_ctl(int epfd, int op, int fd, struct epoll_event event);  // 該函數用於控制某個文件描述符上的事件,能夠註冊事件,修改事件,刪除事件。
第一個參數epfd:是epoll_create()的返回值;
第二個參數op:表示動做(要進行的操做):EPOLL_CTL_ADD:註冊新的fd到epfd中;EPOLL_CTL_MOD:修改已經註冊的fd的監聽事件;EPOLL_CTL_DEL:從epfd中刪除一個fd;
第三個參數fd:是須要監聽的fd;
第四個參數:是告訴內核須要監聽什麼事;
struct epoll_event {
__uint32_t events; /* Epoll events */
epoll_data_t data;  /* User data variable */
};
int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout); // 等待事件的產生(用於輪詢I/O事件的發生),相似於select()調用。
第一個參數epfd:由epoll_create 生成的epoll專用的文件描述符;
第二個參數events:用來從內核獲得事件的集合;
第三個參數maxevents:表示每次能處理的最大事件數(其值不能大於建立epoll_create()時的size);
第四個參數timeout:是超時時間(毫秒,0會當即返回,-1永不超時,或是永久阻塞,直到有事件產生才觸發)。
該函數返回須要處理的事件數目,返回0表示已超時,錯誤返回-1。
 

#include <signal.h> 

signal(參數1,參數2);

參數1:處理的信號。系統的信號通常爲宏定義。

參數2:處理的方式(是系統默認仍是忽略仍是捕獲)。

例如signal(SIGINT ,SIG_ING);

SIG_ING 表明忽略SIGINT信號,SIGINT信號表明由InterruptKey產生,一般是CTRL +C 或者是DELETE 。發送給全部ForeGround Group的進程。

相關文章
相關標籤/搜索