socket 使用

创建一个socket的函数int socket(int domain, int type, int protocol)
{
    sockfd = socket(domain, type, protocol);
}
domain指定使用何种的地址类型,里面的参数定义在linux的sys/socket.h中,比较常用的有:
PF_INET(协议族),AF_INET(地址族): Ipv4网络协议
PF_INET, AF_INET6: Ipv6网络协议
AF_UNIX, AF_LOCAL  本地进程间通讯
type参数的作用是设置通信的协议类型,可能的取值如下所示:
SOCK_STREAM: 提供面向连接的稳定数据传输,即TCP协议。
OOB: 在所有数据传送前必须使用connect()来建立连接状态。
SOCK_DGRAM: 使用不连续不可靠的数据包连接。
SOCK_SEQPACKET: 提供连续可靠的数据包连接。
SOCK_RAW: 提供原始网络协议存取。
SOCK_RDM: 提供可靠的数据包连接。
SOCK_PACKET: 与网络驱动程序直接通信。
参数protocol用来指定socket所使用的传输协议编号。这一参数通常不具体设置,一般设置为0即可。

设置nonblock mode
{
    flag = fcntl(sockfd, F_GETFL, 0)
    fcntl(sockfd, F_SETFL, flag|O_NONBLOCK)    //设置成非阻塞模式;
    fcntl(sockfd, F_SETFL, flags&~O_NONBLOCK); //设置成阻塞模式;
}
socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会返回。
非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功。
{
    /* reuse the address */
    /* 设置了reuseaddr后,服务程序停止后可立即重启*/
    int32_t choice = 1;
    setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
                    &choice, sizeof (int32_t));
     /* 设置非阻塞模式,关闭Nagle算法,用来提高交互的实时性*/
    int32_t choice = 1;
    setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY,
                &choice,sizeof(int32_t));
    struct sockaddr_in addr;
    /* clean up */
    memset(&addr,0,sizeof(struct sockaddr_in));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);
    /* 把点分十进制的IP转换成一个长整型(u_long)*/
    if (service_type == SERVER) {
    /*如果是server的话,就用inet_addr("0.0.0.0"),也就是INADDR_ANY*/
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    } else {
        addr.sin_addr.s_addr = inet_addr(addr);
    }
    /* bind the socket for internet socket */
    bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr));
}
 未完,待续epoll学习:https://www.cppfans.org/1418.html
           http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值