参数解释:
1.3buf和len是指缓存区的位置和大小
1.3.1flags通常为0
recv成功返回实际读取到的数据的长度
注:实际读取的长度可能小于期望len,所以要多次调用recv
recv可能返回0,意味着通信对方已经关闭了连接
recv出错返回-1并设置errno
1.4send基本上同上
发送的实例代码
        int  main(int argc, char *argv[]){
                if(argc<=2){
                        printf("参数是错误");
                }
            //一系列之前的连接
            if(connect(sockfd,(struct sockaddr*) &server_address,sizeof(server_address))<0){
                    printf("连接失败");
            }else{
                    const  char* oob_data = "abc";
                    const  char* normal_data = "123";
                    send(sockfd,normal_data,strlen(normal_data),0);
                    sned(sockefd,oob_data,strlen(oob_data).MSG_OOB);
                    send(sockfd,normal_data,strlen(normal_data),0);
            }
            close(sockfd);
            return 0;
        }
        //接收代码也是类似的
        //连接成功
        int  connfd = accept(sock,(struct  sockaddr *) &client,&client_addrlength);
        char  buffer[BUF_SIZE];
        memset(buffer,‘\0‘,BUF_SIZE);
        ret = recv(connfd,buffer,BUF_SIZE-1,0);
        close(connfd);
        close(sock);
        return 0;
        ./testoobrecv  192.168.1.109  54321
        ./testoobsend  192.168.1.109  54321  
        tcpdump  -ntx -i eth0  port 54321
        注:flags参数只对send和recv的当前调用生效,可以使用setsockket系统调用来永久性修改socket的某些属性原文:http://blog.51cto.com/10725691/2067642