我正在創建函數,可以將函數聲明值傳遞給參數變量。C函數參數爲全局變量設置值?
例如,從我server.c文件:
int sfd; //socket file descriptor
int listenv; //if listen
struct sockaddr_in serverAddress; //server address
int main(int argc, char * argv[]) { //argv[0] == server //argv[1] == port number
listenv = setServer(argv[1],serverAddress,sfd);
//int port = ntohs(serverAddress.sin_port);
printf("sfd = %d port = %d\n", sfd, ntohs(serverAddress.sin_port));
while (listenv == 0) {
}
}
從我serverAPI.h文件:
int setServer (char * portn,struct sockaddr_in saddr,int sfd) {
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = htonl(INADDR_ANY);
saddr.sin_port = (int)htons(atoi(portn));
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0)
error("ERROR opening socket");
printf("Successfully opened socket sfd = %d\n",sfd);
if (bind(sfd, (struct sockaddr *) &saddr, sizeof(saddr)) == -1)
error("ERROR on binding");
printf("Successfully Binded on port %d\n", ntohs(saddr.sin_port));//show correct port number
int listenv;
if((listenv = listen(sfd,5)) < 0)
error("ERROR on listening");
//print message to show connection has been made
printf("Ready and Listening...");
return (listenv);
}
這是我...
我期望從'setServer'函數中,通過變量(即ServerAddress和sfd),值將被該函數聲明,但它沒有...
所以setServer函數中的返回值是:
serverAddress.sin_port = 12345
sfd = 3
listenv = 0
,並從主:
serverAddress.sin_port = 0
sfd = 0
listenv = 0
,因爲它已被列爲全球。
我需要爲setServer設置什麼參數才能設置全局變量的值?
'setServer'需要一個'結構sockaddr_in'作爲第二個參數。你傳遞一個'struct sockaddr_in *'。錯字? – Downvoter
錯別字對不起!哈哈 –