Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > bind() and SIGSEGV when usign UDP

Reply
Thread Tools

bind() and SIGSEGV when usign UDP

 
 
USUN_TO
Guest
Posts: n/a
 
      07-30-2005
Hi, i got problem

when i bind in this way:

local_addr.sin_family = AF_INET;
local_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
local_addr.sin_port = htons(CLIENT_PORT);

i can easly bind port without any SIGSEGV (segmentation fault) but MSDN
wrote:

"If an application does not care what local address is assigned, specify
the manifest constant value ADDR_ANY for the sa_data member of the name
parameter. This allows the underlying service provider to use any
appropriate network address, potentially simplifying application
programming in the presence of multihomed hosts (that is, hosts that
have more than one network interface and address)."

so how write this? What is diference betwean ADDR_ANY and INADDR_ANY?

Thiese lines are wrong cause makes SIGSEGV:

local_addr.sin_addr.s_addr = htonl(ADDR_ANY);
local_addr.sin_addr.s_addr = htons(ADDR_ANY);
local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
local_addr.sin_addr.s_addr = htons(INADDR_ANY);
local_addr.sin_addr.s_addr = INADDR_ANY;
local_addr.sin_addr.s_addr = ADDR_ANY;

Plz help me...
 
Reply With Quote
 
 
 
 
red floyd
Guest
Posts: n/a
 
      07-30-2005
USUN_TO wrote:
> [redacted]


You're OT here. Ask in comp.unix.programmer.

 
Reply With Quote
 
 
 
 
Larry I Smith
Guest
Posts: n/a
 
      07-30-2005
USUN_TO wrote:
> Hi, i got problem
>
> when i bind in this way:
>
> local_addr.sin_family = AF_INET;
> local_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
> local_addr.sin_port = htons(CLIENT_PORT);
>
> i can easly bind port without any SIGSEGV (segmentation fault) but MSDN
> wrote:
>
> "If an application does not care what local address is assigned, specify
> the manifest constant value ADDR_ANY for the sa_data member of the name
> parameter. This allows the underlying service provider to use any
> appropriate network address, potentially simplifying application
> programming in the presence of multihomed hosts (that is, hosts that
> have more than one network interface and address)."
>
> so how write this? What is diference betwean ADDR_ANY and INADDR_ANY?
>
> Thiese lines are wrong cause makes SIGSEGV:
>
> local_addr.sin_addr.s_addr = htonl(ADDR_ANY);
> local_addr.sin_addr.s_addr = htons(ADDR_ANY);
> local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
> local_addr.sin_addr.s_addr = htons(INADDR_ANY);
> local_addr.sin_addr.s_addr = INADDR_ANY;
> local_addr.sin_addr.s_addr = ADDR_ANY;
>
> Plz help me...


Your posting appears to be from a Windows machine.
If you're asking about the bind() found in the Windows
Winsock lib ("Windows Sockets 2"), then you might get help
in a Windows newsgroup. If you're asking about the socket
bind() in Unix or Linux networking, then you'll have to
ask for help in a newsgroup for the appropriate OS.

Regards,
Larry
 
Reply With Quote
 
Larry I Smith
Guest
Posts: n/a
 
      07-30-2005
USUN_TO wrote:
> Hi, i got problem
>
> when i bind in this way:
>
> local_addr.sin_family = AF_INET;
> local_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
> local_addr.sin_port = htons(CLIENT_PORT);
>
> i can easly bind port without any SIGSEGV (segmentation fault) but MSDN
> wrote:
>
> "If an application does not care what local address is assigned, specify
> the manifest constant value ADDR_ANY for the sa_data member of the name
> parameter. This allows the underlying service provider to use any
> appropriate network address, potentially simplifying application
> programming in the presence of multihomed hosts (that is, hosts that
> have more than one network interface and address)."
>
> so how write this? What is diference betwean ADDR_ANY and INADDR_ANY?
>
> Thiese lines are wrong cause makes SIGSEGV:
>
> local_addr.sin_addr.s_addr = htonl(ADDR_ANY);
> local_addr.sin_addr.s_addr = htons(ADDR_ANY);
> local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
> local_addr.sin_addr.s_addr = htons(INADDR_ANY);
> local_addr.sin_addr.s_addr = INADDR_ANY;
> local_addr.sin_addr.s_addr = ADDR_ANY;
>
> Plz help me...



Below is a function extracted from one of my older C++
libs for Windows. Ignore the calls to IsOpen() and Close(),
they reside elsewhere, but the code may still help you
find your problem. Remember to add '#include <winsock.h>'
in your code.


int
ServerIpSocket::BindToPort(int port, int queueSize)
{
SOCKADDR_IN serverSockAddr;
int status;

// if already associated with a port, close
if (IsOpen())
Close();

/* MANDATORY - zero the sockaddr_in structure */
memset (&serverSockAddr, 0, sizeof (serverSockAddr));

/* specify the port portion of the address */
serverSockAddr.sin_port = htons ((u_short)port);

/* specify the address family as Internet */
serverSockAddr.sin_family = AF_INET;

/* specify that the address does not matter */
serverSockAddr.sin_addr.s_addr = htonl (INADDR_ANY);

/* create a socket */
theSocket = socket (AF_INET, SOCK_STREAM, 0);
if (theSocket == INVALID_SOCKET)
{
cerr << "ERROR: socket unsuccessful"
<< endl;

return (-1);
}

/* associate the socket with the address */
status = bind (theSocket,
(LPSOCKADDR) & serverSockAddr,
sizeof (serverSockAddr));
if (status == SOCKET_ERROR)
{
cerr << "ERROR: bind unsuccessful" << endl;

// close theSocket opened by the above socket() call
Close();

return (-1);
}

// allow the socket to take connections.
// specify a waiting connection queue size
status = listen (theSocket, queueSize);
if (status == SOCKET_ERROR)
{
cerr << "ERROR: listen unsuccessful" << endl;

// close theSocket opened by the above socket() call
Close();

return (-1);
}

// NOTE: For this socket class, we are NEVER connected to a client.
// ConnectToClient() will create/return a NEW socket to handle
// each client connection. Therefore we NEVER set "isConn" to
// non-zero for this class (ie: IsConnected() always returns
// zero)

return 0;
}

Regards,
Larry
 
Reply With Quote
 
USUN_TO
Guest
Posts: n/a
 
      07-31-2005
Larry I Smith napisał(a):
> USUN_TO wrote:
>


Thx a lot Larry but the same code under linux works fine and the same
(of course changing to WinSock spec. ) when i bind UDP i got SIGSEGV
(segmentation fault) but when i continue program works fine (not always
stable - so i tracking errors)
 
Reply With Quote
 
Larry I Smith
Guest
Posts: n/a
 
      07-31-2005
USUN_TO wrote:
> Larry I Smith napisał(a):
>> USUN_TO wrote:
>>

>
> Thx a lot Larry but the same code under linux works fine and the same
> (of course changing to WinSock spec. ) when i bind UDP i got SIGSEGV
> (segmentation fault) but when i continue program works fine (not always
> stable - so i tracking errors)


Is the return value of bind() WSAEACCES?
If it is, then (from the MSDN ref for Winsock), this might be
the problem:

<quote>
Attempt to connect datagram socket to broadcast address failed
because setsockopt() option SO_BROADCAST is not enabled.
</quote>

To use datagrams you have to enable SO_BROADCAST by calling
setsocketopt() before doing the bind().
See the MSDN Winsock docs for setsocketopt() for details.

http://msdn.microsoft.com/library/de...tsockopt_2.asp

Regards,
Larry
 
Reply With Quote
 
red floyd
Guest
Posts: n/a
 
      07-31-2005
USUN_TO wrote:
> Larry I Smith napisał(a):
>
>> USUN_TO wrote:
>>

>
> Thx a lot Larry but the same code under linux works fine and the same
> (of course changing to WinSock spec. ) when i bind UDP i got SIGSEGV
> (segmentation fault) but when i continue program works fine (not always
> stable - so i tracking errors)


This is OT, but...

The other thing under Winsock is to make damn sure you call WSAStartup.
 
Reply With Quote
 
USUN_TO
Guest
Posts: n/a
 
      07-31-2005
> The other thing under Winsock is to make damn sure you call WSAStartup.

I use Bcc32 5.5 and Newes MiniGW (from Dev-Cpp 4.9.9.2 with update) and
got thesame SIGSEGV :

http://republika.pl/aao_auth/UDP.rar

there is the source

and plz use GDB as debugger
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Why usign a Variable here won't work ? LC VHDL 9 11-12-2009 10:21 PM
Usign an OCX in an ASP .NET page Jerry Camel ASP .Net 5 10-17-2008 05:25 AM
usign Skype from .NET George Ter-Saakov ASP .Net 4 04-25-2008 12:02 AM
Missing Stack Trace usign log4j brian.vanheesch@gmail.com Java 0 01-23-2006 04:15 PM
Using JavaMail on W2K PC to send mail message usign outlook Neil Daniell Java 0 01-04-2005 03:47 AM



Advertisments