Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Socket communication on multihomed box

immteamimmteam Posts: 2Member
In short, I'm building a kind of server which is supposed to handle open connections with clients. E.g. client connects to the server, the connection stays open, client sends a request to the server, server reasoned, and so on...
The thing is that connection MUST always stay open. I'm using C++, and as for sockets, I'm using native syscalls, not MFC. I'm using stream sockets for communication.

Another thing is that is should work both under Linux and Windows. The code is pretty portable except the part with sockets and threads. I created wrapper classes that implement syscalls for handling threads and sockets, which have the same interface for the rest of my code, but implement a bit differently under Windows and Linux (of course :).
However this is not the problem. It's working just fine for both OSes.

The problem I have are the sockets. Everything was working just fine until I recently installed an USB bluetooth adapter to my computer (Windows). Now, the program won't even connect using a connect() syscall. It returns with an error: 10061 - WSAECONNREFUSED.

Let me also mention that the program is working just fine both on another Windows box, and another Linux box (Mandrake 10).

As I dig a bit deeper, I found out that my computer now has two network adapters - using gethostbyname(). The first one is Bluetooth (192.168.2.1), the second one is LAN (192.168.1.88), and I guess that this is what's causing the problems. Of course, I confirmed this with ipconfig command.

My program is supposed to communicate using LAN interface of course, but it just doesn't, so it seems to me.

Another thing is when I try to connect to Windows from a Linux box (Linux is 192.168.1.98). The Windows program detects the incoming connection in accept(). It creates another socket for communication. But when it comes to receiving data it just goes crazy...
It receives data with recv() syscall. I can clearly see the data received in buffer using a debugger, but recv() returns with some strange number (e.g. -8362460 ???) instead of returning with the number of bytes received, or 0, or -1, right?

Sometimes it returns with -1, and the error is the same 10061 - WSAECONNREFUSED.

Let me mention another thing, everything else (that uses sockets) seems to work on this Windows box with bluetooth adapter. IE, Outlook, Skype, eMule, putty, Total Commander (FTP), Editplus (FTP and SFTP), FlashGet...

Has anybody got any ideas what could cause such a strange behaviour? I even tried the basic examples I first downloaded when I started with this program. The server/client programs that exchange a few bytes and terminate. But they also fail now - was working before.

I read that you can make sockets to use a specific network interface for connection. How can I try this out? Has anybody got some sample code for this?

I'm just going nuts with this. I can't find a solution for this behavior.

Thanks in advance,
Goran

Comments

  • bluj91bluj91 Posts: 133Member
    only thing i can think of is maybe what ever port your using is used by something else or blocked by a firewall,try changing the port.

    : In short, I'm building a kind of server which is supposed to handle open connections with clients. E.g. client connects to the server, the connection stays open, client sends a request to the server, server reasoned, and so on...
    : The thing is that connection MUST always stay open. I'm using C++, and as for sockets, I'm using native syscalls, not MFC. I'm using stream sockets for communication.
    :
    : Another thing is that is should work both under Linux and Windows. The code is pretty portable except the part with sockets and threads. I created wrapper classes that implement syscalls for handling threads and sockets, which have the same interface for the rest of my code, but implement a bit differently under Windows and Linux (of course :).
    : However this is not the problem. It's working just fine for both OSes.
    :
    : The problem I have are the sockets. Everything was working just fine until I recently installed an USB bluetooth adapter to my computer (Windows). Now, the program won't even connect using a connect() syscall. It returns with an error: 10061 - WSAECONNREFUSED.
    :
    : Let me also mention that the program is working just fine both on another Windows box, and another Linux box (Mandrake 10).
    :
    : As I dig a bit deeper, I found out that my computer now has two network adapters - using gethostbyname(). The first one is Bluetooth (192.168.2.1), the second one is LAN (192.168.1.88), and I guess that this is what's causing the problems. Of course, I confirmed this with ipconfig command.
    :
    : My program is supposed to communicate using LAN interface of course, but it just doesn't, so it seems to me.
    :
    : Another thing is when I try to connect to Windows from a Linux box (Linux is 192.168.1.98). The Windows program detects the incoming connection in accept(). It creates another socket for communication. But when it comes to receiving data it just goes crazy...
    : It receives data with recv() syscall. I can clearly see the data received in buffer using a debugger, but recv() returns with some strange number (e.g. -8362460 ???) instead of returning with the number of bytes received, or 0, or -1, right?
    :
    : Sometimes it returns with -1, and the error is the same 10061 - WSAECONNREFUSED.
    :
    : Let me mention another thing, everything else (that uses sockets) seems to work on this Windows box with bluetooth adapter. IE, Outlook, Skype, eMule, putty, Total Commander (FTP), Editplus (FTP and SFTP), FlashGet...
    :
    : Has anybody got any ideas what could cause such a strange behaviour? I even tried the basic examples I first downloaded when I started with this program. The server/client programs that exchange a few bytes and terminate. But they also fail now - was working before.
    :
    : I read that you can make sockets to use a specific network interface for connection. How can I try this out? Has anybody got some sample code for this?
    :
    : I'm just going nuts with this. I can't find a solution for this behavior.
    :
    : Thanks in advance,
    : Goran
    :
    :

Sign In or Register to comment.