linux socke 错误码函数,linux下socket编程bind函数返回异常码98 Address already in use

linux下socket编程bind函数返回错误码98 Address already in use

初次接触linux socket编程,遇到了这个问题…… 查看了其他地方的说明,都没有起作用……

发一下代码,求帮忙看一下~  其中,Socket和ServerSocket不是我自己写的,是直接应用的别人的类。

Socket.h

// Definition of the Socket class

#ifndef Socket_class

#define Socket_class

#include 

#include 

#include 

#include 

#include 

#include 

#include 

const int MAXHOSTNAME = 200;

const int MAXCONNECTIONS = 5;

const int MAXRECV = 500;

class Socket

{

public:

Socket();

virtual ~Socket();

// Server initialization

bool create();

bool bind ( const int port );

bool listen() const;

bool accept ( Socket& ) const;

// Client initialization

bool connect ( const std::string host, const int port );

// Data Transimission

bool send ( const std::string ) const;

int recv ( std::string& ) const;

void set_non_blocking ( const bool );

bool is_valid() const { return m_sock != -1; }

private:

int m_sock;

sockaddr_in m_addr;

};

#endif

Socket.cpp

// Implementation of the Socket class.

#include "Socket.h"

#include "string.h"

#include 

#include 

#include 

#include 

using namespace std;

Socket::Socket() :

m_sock ( -1 )

{

memset ( &m_addr,

0,

sizeof ( m_addr ) );

}

Socket::~Socket()

{

if ( is_valid() )

::close ( m_sock );

}

bool Socket::create()

{

m_sock = socket ( AF_INET,

SOCK_STREAM,

0 );

if ( ! is_valid() )

return false;

// TIME_WAIT - argh

int on = 1;

if ( setsockopt ( m_sock, SOL_SOCKET, SO_REUSEADDR, ( const char* ) &on, sizeof ( on ) ) == -1 )

return false;

return true;

}

bool Socket::bind ( const int port )

{

if ( ! is_valid() )

{

cout<

return false;

}

m_addr.sin_family = AF_INET;

m_addr.sin_addr.s_addr = INADDR_ANY;

m_addr.sin_port = htons ( port );

int bind_return = ::bind ( m_sock,

( struct sockaddr * ) &m_addr,

sizeof ( m_addr ) );

if ( bind_return == -1 )

{

cout<

return false;

}

return true;

}

bool Socket::listen() const

{

if ( ! is_valid() )

{

return false;

}

int listen_return = ::listen ( m_sock, MAXCONNECTIONS );

if ( listen_return == -1 )

{

return false;

}

return true;

}

bool Socket::accept ( Socket& new_socket ) const

{

int addr_length = sizeof ( m_addr );

new_socket.m_sock = ::accept ( m_sock, ( sockaddr * ) &m_addr, ( socklen_t * ) &addr_length );

if ( new_socket.m_sock <= 0 )

return false;

else

return true;

}

bool Socket::send ( const string s ) const

{

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值