TheDodger
18-08-2001, 18:45
So, damit nicht immer andere zum Thema Socketprogrammierung schreiben, will ich mich auch einmal damit beschäftigen ... ;)
ich habe mir das tuturial von http://home.t-online.de/home/felix.opatz/socket-tipps.html
zu gemüte geführt und einiges davon auch ausprobiert ...
bei einem allerdings scheitere ich kläglich ... :(
Hier mal ein stück 'relevanter' code:
struct sockaddr_in _server;
struct sockaddr_in cli;
_socket = socket( AF_INET, SOCK_STREAM, 0 );
if( _socket == -1 )
{
perror( "socket() failed" );
return 2;
}
_server.sin_addr.s_addr = INADDR_ANY;
_server.sin_port = htons( ( unsigned short int ) conf->getServerPort( ) );
_server.sin_family = AF_INET;
if( bind( _socket, (struct sockaddr*)&_server, sizeof( _server ) ) == -1 )
{
perror("bind() failed");
return 3;
}
if( listen( _socket, 3 ) == -1 )
{
perror( "listen() failed" );
return 4;
}
for( ;; )
{
cli_size = sizeof( cli );
c = accept( _socket, &cli, &cli_size );
lasse ich die zeile
c = accept( _socket, &cli, &cli_size );
so wie sie ist, meckert mein gcc und meint:
server.cpp: In method `bool server::run()':
server.cpp:108: type `sockaddr' is not a base type for type `sockaddr_in'
ändere ich das wie im tuturial in :
c = accept( _socket, (struct sockaddr *)&cli, &cli_size );
um, meint der compiler:
server.cpp: In method `bool server::run()':
server.cpp:107: passing `int *' as argument 3 of `accept(int, sockaddr *, socklen_t *)' changes signedness
und daraus werd ich nun nicht mehr schlau ...
was mach ich denn nun falsch?
ich hoffe, ihr könnt mir helfen! ;)
B.
ich habe mir das tuturial von http://home.t-online.de/home/felix.opatz/socket-tipps.html
zu gemüte geführt und einiges davon auch ausprobiert ...
bei einem allerdings scheitere ich kläglich ... :(
Hier mal ein stück 'relevanter' code:
struct sockaddr_in _server;
struct sockaddr_in cli;
_socket = socket( AF_INET, SOCK_STREAM, 0 );
if( _socket == -1 )
{
perror( "socket() failed" );
return 2;
}
_server.sin_addr.s_addr = INADDR_ANY;
_server.sin_port = htons( ( unsigned short int ) conf->getServerPort( ) );
_server.sin_family = AF_INET;
if( bind( _socket, (struct sockaddr*)&_server, sizeof( _server ) ) == -1 )
{
perror("bind() failed");
return 3;
}
if( listen( _socket, 3 ) == -1 )
{
perror( "listen() failed" );
return 4;
}
for( ;; )
{
cli_size = sizeof( cli );
c = accept( _socket, &cli, &cli_size );
lasse ich die zeile
c = accept( _socket, &cli, &cli_size );
so wie sie ist, meckert mein gcc und meint:
server.cpp: In method `bool server::run()':
server.cpp:108: type `sockaddr' is not a base type for type `sockaddr_in'
ändere ich das wie im tuturial in :
c = accept( _socket, (struct sockaddr *)&cli, &cli_size );
um, meint der compiler:
server.cpp: In method `bool server::run()':
server.cpp:107: passing `int *' as argument 3 of `accept(int, sockaddr *, socklen_t *)' changes signedness
und daraus werd ich nun nicht mehr schlau ...
was mach ich denn nun falsch?
ich hoffe, ihr könnt mir helfen! ;)
B.