网络套接字函数

  1. socket函数
    #include <sys/types.h> /* See NOTES */
    #include <sys/socket.h>
    int socket(int domain, int type, int protocol);
    domain:
    AF_INET这是大多数用来产生socket的协议,使用TCP或者UDP来传输,用IPv4地址;
    AF_INET6与上面类似,不过时来用IPv6地址;
    AF_UNIX本地协议,使用在Unix和Linux系统上,一般时客户机和服务器在同一台机器上时才能使用;

type:
SOCK_STREAM:这个协议时按照顺序的,可靠的数据完整的基于字节流的连接,这是一个使用最多的sockt,是使用TCP进行传输;
SOCK_DGRAM这个协议是无连接的,固定长度的传输调用,该协议是不可靠的,使用UDP来进行它的连接;
SOCK_SEQPACKET该协议是双线路的,可靠的连接,发送固定长度的数据包进行传输。必须把这个数据包完整的接受才能读取。
SOCK_RAW socket类型提供单一的网络访问,这个socket类型使用ICMP公共协议(ping ,traceroute使用该协议);
SOCK_RDM这个类型是很少使用的,在大部分操作系统中没有实现,它是提供给数据链路层使用的,不保证数据包的顺序;
protocol:
传0表示使用默认协议;
返回值:成功指向新创建的socket的文件描述符,失败,返回-1 设置errorno;

2.bind函数 (将端口号和IP绑定在套接字上面)
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr addr, socklen_t addrlen);
sockfd:socket文件描述符
addr:构造出IP地址加端口号;
addrlen:sizeof(addr)长度;
返回值:成功返回0,失败返回-1设置errno;
3.listen函数(指定监听上限数,指定bcaklog个客户端等待连接)
#include <sys/types.h> /
See NOTES /
#include <sys/socket.h>
int listen(int sockfd, int backlog);
sockfd:socket文件描述符;
backlog:排队建立3次握手队列和刚刚建立3次握手队列的连接数和;
查看系统默认的backlog
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
成功返回0,失败返回-1;
4. accept函数
#include <sys/types.h> /
See NOTES */
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t addrlen);
socket:socket文件描述符
addr:传出参数,传出链接客户端地址信息,含Ip地址和端口号;
addrlen: 传入传出参数(值-结果),传入sizeof(addr)大小,函数返回时返回真正接收到的地址结构体的大小返回值;
返回值:
成功返回一个新的socket文件描述符,用于和客户端通信,失败返回-1,设置errorno;
5.connect函数(客户端调用,连接服务器)
#include <sys/types.h> /
See NOTES */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
sockfd:socket文件描述符
addr;传入参数,指定服务器端地址信息,含IP地址和端口号;
addrlen:传入参数,传入sizeof(addr)大小
返回值:成功返回0,失败返回-1,设置errorno;

猜你喜欢

转载自blog.csdn.net/weixin_37603532/article/details/90141204