Socket probléma

Socket probléma
2013-02-20T11:49:25+01:00
2013-02-20T12:10:43+01:00
2022-08-07T10:50:30+02:00
jozsi111
Sziasztok segítségeteket kérném. Socket megtanulásával próbálkozom és már a legelején elakadtam. A hiba a getsockname nél található. Néztem megoldásokat másfelé és és csak a cast-olást írják, amit ki is próbáltam de nem működött:// Valakinek van valami ötlete? Segítségeteket előre is köszönöm!!

#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> int main(int argc,char *argv[]) { int msd,csd,i; struct sockaddr_in a; char buf[512]; msd = socket(AF_INET,SOCK_STREAM,0); a.sin_family = AF_INET; a.sin_addr.s_addr = INADDR_ANY; a.sin_port = 0; i = sizeof(a); bind(msd,(struct sockaddr *)&a,i); //getsockname(msd,&a,&i); printf("S_port:%d\n",ntohs(a.sin_port)); listen(msd,5); for(;;) { csd = accept(msd,0,0); if(fork()==0) { close(msd); if((i=read(csd,buf,sizeof(buf)))>0) { write(csd,buf,i);printf(buf); } exit(0); } close(csd); } }

A hiba üzenet:
ERROR:

/home/ji/server/main.c|17|warning: passing argument 2 of &#8216;getsockname&#8217; from incompatible pointer type [enabled by default]| /usr/include/i386-linux-gnu/sys/socket.h|119|note: expected &#8216;struct sockaddr * __restrict__&#8217; but argument is of type &#8216;struct sockaddr_in *&#8217;| /home/ji/server/main.c|17|warning: pointer targets in passing argument 3 of &#8216;getsockname&#8217; differ in signedness [-Wpointer-sign]| /usr/include/i386-linux-gnu/sys/socket.h|119|note: expected &#8216;socklen_t * __restrict__&#8217; but argument is of type &#8216;int *&#8217;| /home/ji/server/main.c|23|warning: implicit declaration of function &#8216;fork&#8217; [-Wimplicit-function-declaration]| /home/ji/server/main.c|25|warning: implicit declaration of function &#8216;close&#8217; [-Wimplicit-function-declaration]| /home/ji/server/main.c|26|warning: implicit declaration of function &#8216;read&#8217; [-Wimplicit-function-declaration]| /home/ji/server/main.c|28|warning: implicit declaration of function &#8216;write&#8217; [-Wimplicit-function-declaration]| /home/ji/server/main.c|28|warning: format not a string literal and no format arguments [-Wformat-security]| /home/ji/server/main.c|30|warning: implicit declaration of function &#8216;exit&#8217; [-Wimplicit-function-declaration]| /home/ji/server/main.c|30|warning: incompatible implicit declaration of built-in function &#8216;exit&#8217; [enabled by default]| ||=== Build finished: 2 errors, 9 warnings ===|

IDE :Code Blocks
Fordító: GNU GCC
Mutasd a teljes hozzászólást!
A getstockname deklarációja:

int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

Tehát ilyen típusú paraméterekkel kell meghívnod.
Vagy próbáld a kasztolgatást, ha már azt ajánlották:

getsockname(msd,(struct sockaddr *)&a,(socklen_t*)&i);
Mutasd a teljes hozzászólást!

abcd