美文网首页
socket API

socket API

作者: 哟破赛呦 | 来源:发表于2019-01-28 18:08 被阅读0次

    socket 结构

    image

    socket

    #include <sys/types.h> 
    #include <sys/socket.h>
    int socket(int domain, int type, int protocol);
    
    • domain:
      填地址族 AF_INET,AF_INET6,AF_UNIX
    • type:
      SOCK_STREAM: 使用面向连接的流传输协议
      SOCK_DGRAM: 使用无连接的数据报协议
    • protocol:
      0 : 默认协议,流传输默认tcp,数据报默认udp
    • retrurn
      成功返回一个新的套接字sockfd,失败返回-1并设置errno

    bind 给本地套接字赋予地址和端口

    #include <sys/types.h>
    #include <sys/socket.h>
    int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
    
    • sockfd:
      sock套接字
    • addr:
      sockaddr结构体,强转sockaddr_insockaddr_in6
    • addrlen:
      addr结构体实际大小
    • return:
      成功返回0,失败返回­-1, 设置errno

    listen 开始监听

    #include <sys/socket.h>
    int listen(int sockfd, int backlog);
    
    • sockfd:
      参数为成功调用socket函数返回的套接字,并已经成功调用了bind()
    • backlog:
      参数告诉套接字在忙于处理上一个请求时,还可以接受多少个进入的请求。
    • retrun:
      调用成功返回0,失败返回­-1,设置errno
    • 查看系统默认backlog
      cat /proc/sys/net/ipv4/tcp_max_syn_backlog

    accept 接受网络连接

    #include <sys/types.h>
    #include <sys/socket.h>
    int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
    
    • sockfd:
      参数为成功调用socket函数返回的套接字,并已经成功调用了 bind()listen()
    • addr:
      传出参数,返回连接客户端地址信息,含IP地址和端口号。(如果使用IPv4地址族,那么它需要我们填个指向sockaddr_in结构的指针)
    • addrlen:
      传入传出参数,传入sizeof(addr)大小,函数返回时返回真正接收到地址结构体的大小
    • return:
      成功返回一个新的socket文件描述符,用于和客户端通信,失败返回­-1,设置errno

    connect 连接远程主机

    请求连接是客户端的动作,TCP/IP客户端需要调用connect()去连接一个服务器:

    #include <sys/types.h>
    #include <sys/socket.h>
    int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
    
    • sockfd:
      参数是成功调用socket()返回的套接字。
    • addr:
      传入参数,指定服务器端地址信息,含IP地址和端口号
    • addrlen:
      传入参数,如IPV4传入sizeof(struct sockaddr_in)大小
    • return
      如果调用成功,表示连接已经建立(三次握手完成),返回0。否则返回 ­-1,设置errno

    socket I/O

    对于套接字的I/O有很多API可以用,如send()recv()readv()writev()sendmsg()recvmsg()read()write()等等。只介绍常用的I/O接口read()write()

    #include <unistd.h>
    int read(int sockfs, void *buf, size_t nbytes);
    int write(int sockfd, void *buf, size_t nbytes);
    

    关闭套接字

    #include <unistd.h>
    int close(int sockfd);
    

    调用close()会触发四次握手关闭连接。

    实例

    待补充。。。

    相关文章

      网友评论

          本文标题:socket API

          本文链接:https://www.haomeiwen.com/subject/vrxzjqtx.html