mam jakiś tam kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 9034 // port, na którym nas³uchujemy
int main( void )
{
fd_set master; // g³ówna lista deskryptorów plików
fd_set read_fds; // pomocnicza lista deskryptorów dla select()
struct sockaddr_in myaddr; // adres serwera
struct sockaddr_in remoteaddr; // adres klienta
int fdmax; // maksymalny numer deskryptora pliku
int listener; // deskryptor gniazda nas³uchuj¹cego
int newfd; // nowozaakceptowany deskryptor gniazda
char buf[ 256 ]; // bufor na dane pochodz¹ce od klienta
int nbytes;
char yes = 1; // dla setsockopt() SO_REUSEADDR, patrz ni¿ej
int addrlen;
int i, j;
FD_ZERO( & master ); // wyczyœæ g³ówny i pomocniczy zestaw
FD_ZERO( & read_fds );
// utwórz gniazdo nas³uchuj¹ceo
if(( listener = socket( AF_INET, SOCK_STREAM, 0 ) ) == - 1 ) {
perror( "socket" );
exit( 1 );
}
// zgub wkurzaj¹cy komunikat b³êdu "address already in use"
if( setsockopt( listener, SOL_SOCKET, SO_REUSEADDR, &yes,
sizeof( int ) ) == - 1 )
{
perror( "setsockopt" );
exit( 1 );
}
// bind
myaddr.sin_family = AF_INET;
myaddr.sin_addr.s_addr = INADDR_ANY;
myaddr.sin_port = htons( PORT );
memset( &( myaddr.sin_zero ), '\0', 8 );
if( bind( listener,( struct sockaddr * ) & myaddr, sizeof( myaddr ) ) == - 1 ) {
perror( "bind" );
exit( 1 );
}
// listen
if( listen( listener, 10 ) == - 1 ) {
perror( "listen" );
exit( 1 );
}
// dodaj gniazdo nas³uchuj¹ce do g³ównego zestawu
FD_SET( listener, & master );
// œledŸ najwy¿szy numer deskryptora pliku
fdmax = listener; // póki co, ten jest najwiêkszy
// pêtla g³ówna
for(;; ) {
read_fds = master; // copy it
if( select( fdmax + 1, & read_fds, NULL, NULL, NULL ) == - 1 ) {
perror( "select" );
exit( 1 );
}
// przejdŸ przez obecne po³¹czenia szukaj¹c danych do odczytania
for( i = 0; i <= fdmax; i++ ) {
if( FD_ISSET( i, & read_fds ) ) { // mamy jednego!!
if( i == listener ) {
// obs³u¿ nowe po³¹czenie
addrlen = sizeof( remoteaddr );
if(( newfd = accept( listener,( struct sockaddr * ) & remoteaddr,
& addrlen ) ) == - 1 ) {
perror( "accept" );
} else {
FD_SET( newfd, & master ); // dodaj do g³ównego zestawu
if( newfd > fdmax ) { // œledŸ maksymalny
fdmax = newfd;
}
printf( "selectserver: new connection from %s on "
"socket %d\n", inet_ntoa( remoteaddr.sin_addr ), newfd );
}
} else {
// obs³u¿ dane od klienta
if(( nbytes = recv( i, buf, sizeof( buf ), 0 ) ) <= 0 ) {
// b³¹d lub po³¹czenie zosta³o zerwane
if( nbytes == 0 ) {
// po³¹czenie zerwera
printf( "selectserver: socket %d hung up\n", i );
} else {
perror( "recv" );
}
close( i ); // papa!
FD_CLR( i, & master ); // usuñ z g³ównego zestawu
} else {
// mamy trochê danych od klienta
for( j = 0; j <= fdmax; j++ ) {
// wyœlij do wszystkich!
if( FD_ISSET( j, & master ) ) {
// oprócz nas i gniazda nas³uchuj¹cego
if( j != listener && j != i ) {
if( send( j, buf, nbytes, 0 ) == - 1 ) {
perror( "send" );
}
}
}
}
}
} // jakie to BRZYDKIE!!
}
}
}
return 0;
}
i tak to krzyczy, że nie mam biblioteki a jak zamiast
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
dam
#include <winsock2.h>
to wywala z kolei błędy w kodzie(bo to inna biblioteka...) pomorze ktoś to "przepisać" poprawnie? Przy okazji morze podrzucę link do mojej gierki jak ktoś mi powie jak wrzucić :)