2013-11-20 20 views
1
data_size = recvfrom(sock_raw , buffer , 1024, 0 , &saddr , 
               (socklen_t*)&saddr_size); 

這裏限定結構是一個recvfrom函數,其中我想創建一個結構爲「SADDR」和其在main()聲明爲「saddr_size」如下懷疑在在C插座程序

struct sockaddr saddr; 
    int saddr_size; 
    saddr_size = sizeof saddr; 

而不是在下面的write() api中提到的緩衝區,我必須使用結構變量。

int cont= write(logfile,buffer,data_size); 

我的問題是:下面我使用了結構。這是爲以下字段定義結構的方式嗎?它是否被正確地聲明?如果不是,請有人指導我糾正它。

struct data{ 
     unsigned char buffer[1024]; 
     unsigned long int saddr; 
     // struct sockaddr saddr; 
     int saddr_size; 
    }; 
+0

歡迎堆棧交流!這應該在Stack Overflow上 - 在Unix和Linux上,我們不喜歡回答編程問題,除非它們是關於特定於* nix系統的API或接口,或者它是一個shell編程問題。這既不是,所以我正在標誌着這一舉措。 – strugee

+0

您是否懷疑**或者您有**問題**? :) – haccks

+1

該結構看起來是正確的。你有沒有遇到這個問題? 'recvfrom'中的1024可能需要更改爲適當的'sizeof(struct data)'.. – anishsane

回答

2

我認爲這是你的結構。

struct fields{ 
    unsigned char msg[1024];  // buffer received. 
    char saddr[14];    // network socket address received. 
    int sock_size;    // sizeof socket structure. 
}data; 

recvfrom電話後,定義/初始化結構變量(即,複製緩衝器,網絡地址,大小,結構域)。

現在,結構數據記錄到文件

fprintf(logfile,"%s %s %d",data.msg,data.saddr.address,data.saddr_size);