Fehler mit bind

paul10

Mitglied
Hallo,
vorweg ich habe erst mit der Netzwerkprogrammierung angefangen und versuche jetzt einen Server zu machen, der einfach Daten enfängt, es geht bis bind gut, aber dann trifft ein Fehler auf den ich einfach nicht komme ( WSAGetLastError gibt bei bind 10038 zurück ) :
Code:
#include <io.h>
#include <iostream>
#include <cstring>
#include <string>
#include <winsock.h>
#include "socket.h"

using namespace std;
// Verbindung zu Winsock.dll herstellen
void Socket::wsastartup( WORD wVersion, WSADATA& wsaData ){
	if ( WSAStartup ( wVersion, &wsaData ) != 0 ) {
		cout << "Fehler bei WSAStartup!\nDas Programm muss beendet werden!\n";
		cout << WSAGetLastError();
		exit ( 1 );
	}
}

// Den Socket erzeugen
int Socket::socket ( ) {
	if ( sock = ::socket( AF_INET, SOCK_STREAM, 0 ) == SOCKET_ERROR ) {
		cout << "Fehler bei socket!\nDas Programm muss beendet werden!\n";
		cout << WSAGetLastError( ) << endl;
		system( "PAUSE" );
		exit ( 1 );
		return -1;
	}else 
		return sock;

}

// Socket an einen Server binden
bool Socket::bind( const int port){
	int bind_return;
	m_addr.sin_family = AF_INET;
	m_addr.sin_port = htons ( port );
	m_addr.sin_addr.s_addr = INADDR_ANY; 
	cout << "sock : " << sock <<endl;
	system( "PAUSE" );
	system( "PAUSE" );
	bind_return = ::bind ( sock, ( struct sockaddr * ) &m_addr, sizeof ( m_addr ) );
	if ( bind_return == SOCKET_ERROR ) {
		cout << "Fehler bei bind!\nDas Programm muss beendet werden!\n";
		cout << WSAGetLastError () << endl;
		system ( "PAUSE" );
		exit ( 1 );
		return false;
	}else
		return true;
	
}	

// Einen Port abhören
void Socket::listen( const int MAXCONNECTIONS) {
	if ( ::listen ( sock, MAXCONNECTIONS ) == SOCKET_ERROR ){
		cout << "Fehler bei listen!\nDas Programm muss beendet werden!\n";
		cout << WSAGetLastError ( ) << endl;
		system ( "PAUSE" );
		exit ( 1 );
	}
}

// Eine Warteschlange einrichten
void Socket::accept ( Socket& new_socket ) {
	int addrlen = sizeof ( m_addr );
	if ( new_socket.sock = ::accept ( sock, ( sockaddr * ) &m_addr, ( int * ) &addrlen ) ) {
		cout << "Fehler bei accept!\nDas Programm muss beendet werden!\n";
		cout << WSAGetLastError ( ) << endl;
		system ( "PAUSE" );
		exit ( 1 );
	}
}

// Daten entfangen
void Socket::recv ( string& s ) {
	string buf;
	int recv;
	if ( recv = ::recv ( sock,( char * ) buf.c_str(), buf.size(), 0 ) == SOCKET_ERROR ) { 
		cout << "Fehler bei recv!\nDas Programm muss beendet werden!\n";
		cout << WSAGetLastError ( ) << endl;
		system ( "PAUSE" );
		exit ( 1 );
	}
	else 
		s = buf;
	}

// Socketschließen
void Socket::close( ) {
	closesocket( sock );
	}

// WSACleanup : Verbindung zur Winsock.dll beenden
void Socket::CleanUp( ) {
	WSACleanup( );
	}

ich hoffe ihr könnt mir helfen

Danke im vorraus

Gruß
 
Code:
	if ( sock = ::socket( AF_INET, SOCK_STREAM, 0 ) == SOCKET_ERROR ) {
== bindet stärker als =, die Zeile ist also gleichbedeutend mit
Code:
	if ( sock = (::socket( AF_INET, SOCK_STREAM, 0 ) == SOCKET_ERROR) ) {
, richtig wäre allerdings
Code:
	if ( (sock = ::socket( AF_INET, SOCK_STREAM, 0 )) == SOCKET_ERROR ) {
.

Grüße, Matthias
 
hmm, blöder Fehler der mir da passiert ist , aber vielen vielen Dank .
Du hast meine Sorgen gelöst :)

Gruß
 
Zurück