2011-04-09 177 views
0

我使用下面的函數從文件進行讀取...讀取數據從UDP套接字

int cread(int fd, char *buf, int n){ 

    int nread; 

    if((nread=read(fd, buf, n))<0){ 
    perror("Reading data"); 
    exit(1); 
    } 
    return nread; 
} 

下面是使用上述功能

if(FD_ISSET(tap_fd, &rd_set)){ 
    /* data from tun/tap: just read it and write it to the network */ 

    nread = cread(tap_fd, buffer, BUFSIZE); 

    tap2net++; 
    do_debug("TAP2NET %lu: Read %d bytes from the tap interface\n", tap2net, nread); 

    /* write length + packet */ 
    plength = htons(nread); 
    nwrite = cwrite(net_fd, (char *)&plength, sizeof(plength)); 
    nwrite = cwrite(net_fd, buffer, nread); 

    do_debug("TAP2NET %lu: Written %d bytes to the network\n", tap2net, nwrite); 
} 

他們都很好地工作的功能TCP插座,但不是與udp插座..任何幫助,將不勝感激

+0

在爲UDP情況設置的文件描述符中是否有tap_fd? – Jeff 2011-04-09 07:13:11

回答

0

這並不清楚你的問題到底是什麼,但如果net_fd是一個UDP套接字,那麼兩個cwrite()呼叫將創建兩個 UDP數據報。

在預先考慮UDP的大小方面沒有多大意義 - UDP爲您維護消息邊界。所以在UDP情況下,請完全刪除plength部分。