[英]“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.