ly602549803 发表于 2013-04-17 10:05

raw socket(菜鸟入门)求知道!

#include<stdio.h>
#include "tcpnc.h"
#define BACKLOG 10
#define STDIN 0
int main(int argc,char *argv[])
{
        FILE *fp;
        char buf;        //packet buffer
        char buff;        //account buffer
        char send_str;        //the content of sending
        char *str;
        int recvbytes;
        int sockfd,client_fd;
        fd_set rfd_set,wfd_set,efd_set;
        struct timeval timeout;
        int ret;
        if((sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_TCPNC))<0)
        {
                printf("socket error!");
                exit(1);
        }
        struct sockaddr_in my_addr,remote_addr;
        int sin_size;
        memset(&my_addr,0,sizeof(my_addr));
        //bzero(&my_addr,sizeof(struct sockaddr_in));
        my_addr.sin_family=AF_INET;
        my_addr.sin_port=htons(SERVERPORT);
        //my_addr.sin_addr.s_addr=htonl(INADDR_ANY);
        inet_aton("127.0.0.1",&my_addr.sin_addr);
        //my_addr.sin_addr.s_addr=inet_addr("200.200.30.42");
        const int on=1;
        if(setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on))==-1)
        {
                printf("setsockopt error!");
                exit(0);
        }
        sin_size=sizeof(my_addr);
        if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
        {
                printf("bind error!");
                exit(1);
        }
        int lis=listen(sockfd,BACKLOG);
        if(lis==-1)
        {
                printf("listen error!");
                exit(1);
        }
        if((client_fd=accept(sockfd,(struct sockaddr *)&remote_addr,&sin_size))==-1)
        {
                printf("accept error!");
                exit(1);
        }代码运行出来,显示listen error!是不是由于raw socket不能够进行bind,listen啊?还是什么原因阿?求知道一下。主要是想做一个对tcp协议进行改进的私有协议,大家有没有好的方法阿,用原始套接字可以实现吗?
页: [1]
查看完整版本: raw socket(菜鸟入门)求知道!