网络编程的一些函数
#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()返回引用新套接口的描述字; 否则,返回INVALID_SOCKET错误
#include <sys/types.h>
#include <sys/socket.h>
函数原型:(通过给一个未命名套接口分配一个本地名字来为套接口建立本地捆绑(主机地址/端口号))
int bind(int sockfd, // socket描述符
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/select.h>
#include <signal.h>
signal(参数1,参数2);
参数1:处理的信号。系统的信号一般为宏定义。
参数2:处理的方式(是系统默认还是忽略还是捕获)。
例如signal(SIGINT ,SIG_ING);
SIG_ING 代表忽略SIGINT信号,SIGINT信号代表由InterruptKey产生,通常是CTRL +C 或者是DELETE 。发送给所有ForeGround Group的进程。