当前位置: 技术问答>linux和unix
linux下socket编程bind函数返回错误码98 Address already in use
来源: 互联网 发布时间:2017-05-22
本文导语: 初次接触linux socket编程,遇到了这个问题…… 查看了其他地方的说明,都没有起作用…… 发一下代码,求帮忙看一下~ 其中,Socket和ServerSocket不是我自己写的,是直接应用的别人的类。 Socket.h // Definition of the...
初次接触linux socket编程,遇到了这个问题…… 查看了其他地方的说明,都没有起作用……
发一下代码,求帮忙看一下~ 其中,Socket和ServerSocket不是我自己写的,是直接应用的别人的类。
Socket.h
Socket.cpp
发一下代码,求帮忙看一下~ 其中,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