簡體   English   中英

在接受()套接字系統調用中“需要左值作為一元'&'操作數”

[英]“lvalue required as unary '&' operand” in accept() socket system call

我正在編寫一個網絡程序,在服務器部分,我想使用偵聽套接字接受來自多個客戶端的連接。 所以我聲明了一個地址結構數組,如下所示:

struct sockaddr_in* client;

我使用 malloc 及以后創建的,以接受我輸入的連接:

newsock = accept(fd_skt, (struct sockaddr *)&client[i], &(sizeof(client[i])));

我從編譯器那里得到"lvalue required as unary '&' operand" 誰能弄清楚我做錯了什么?

是的,您不能獲取不是lvalue的地址,即帶有地址的 object 。 sizeof運算符的結果只是一個值,它不是帶有地址的 object。

您需要創建一個局部變量,以便獲取其地址。

例如

socklen_t addrlen = sizeof client[i];
newsock = accept(fd_skt, (struct sockaddr *)&client[i], &addrlen));

順便說一句, struct sockaddr_in* client; 聲明一個指針,而不是一個數組。 要將client用作數組,您需要在調用accept之前的某個時刻將其分配給動態分配的數組。 當您說“我使用 malloc 創建”時,我認為這就是您正在做的事情。

或者,您實際上可以將client聲明為數組。

struct sockaddr_in client[MAX_CLIENTS];

查爾斯的回答是正確的,但是解決這種令人討厭的 function 接口的一種方法是使用復合文字:

newsock = accept(fd_skt, (struct sockaddr *)&client[i], (socklen_t[]){sizeof client[0]});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM