Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Socket: bind error...why??

Reply
Thread Tools

Socket: bind error...why??

 
 
M.Caggiano
Guest
Posts: n/a
 
      02-03-2008
Hi!
This code wants to simulate a possible answer of a server, to an
application of connection aside a client.
The server has to accept the connection and send a message with its
name.
The all through socket.

The program DOESN'T HAVE errors or warnings.

I have a problem in the function "bind" (what I have underlined with
of the "- ") because its return value is "-1" (therefore error!).
I don't understand because the function return this value.

Can you help me?
Thank's for all.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock.h>
#include <windows.h>

void err_fatal(char *);

main()
{
/* apertura connessione lato client */
int taddr_n, tport_n;
struct sockaddr_in saddr, caddr;
char *buffer;
int result=0,addrlen=0;
SOCKET s,s1;
WSADATA data; // inizializzo la variabile che contiene le primitive
di Winsock
WORD p;
int err=0;
p=MAKEWORD(2,0); // creo la variabile p che contiene la versione
della wsock32.dll
err=WSAStartup(p,&data); // inizializzo la wsock32.dll verificandone
la mancanza di errori

/* creazione socket */
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s==INVALID_SOCKET) err_fatal("socket() failed!");

tport_n=htons(1037);
printf("\nhtons eseguita correttamente(%d)\n",tport_n);

saddr.sin_family=AF_INET;
saddr.sin_port=tport_n;
saddr.sin_addr.s_addr=INADDR_ANY; /* accetto qualsiasi indirizzo
*/

//----------------------------------------------------------------------------------------------------------------------
result=bind(s,(struct sockaddr *) &saddr, sizeof(saddr));
//----------------------------------------------------------------------------------------------------------------------
if(result==-1) err_fatal("Bind() fault");
buffer="My server name is: MIKY";
printf("%s",buffer);
result=listen(s,20);

/* accetto la connessione*/
addrlen=sizeof(struct sockaddr_in);
s1=accept(s,(struct sockaddr *) &caddr, &addrlen);

send(s1,buffer,strlen(buffer),0);

system("pause");

/* Chiude i socket */
WSACleanup();
closesocket(s);
}


/* stampa errore */
void err_fatal(char *mes)
{
printf("%s, errno=%d\n",mes,WSAGetLastError());
perror("");
system("pause");
exit(1);
}
 
Reply With Quote
 
 
 
 
Walter Roberson
Guest
Posts: n/a
 
      02-03-2008
In article <(E-Mail Removed)>,
M.Caggiano <(E-Mail Removed)> wrote:

>This code wants to simulate a possible answer of a server, to an
>application of connection aside a client.


>I have a problem in the function "bind" (what I have underlined with
>of the "- ") because its return value is "-1" (therefore error!).
>I don't understand because the function return this value.


>Can you help me?


bind() is not part of the standard C library. As you appear to
be using Windows, you should be asking in a Windows programming
newsgroup.


> WSADATA data; // inizializzo la variabile che contiene le primitive
>di Winsock


> err=WSAStartup(p,&data); // inizializzo la wsock32.dll verificandone
>la mancanza di errori


You are possibly using the value of data before it is initialized,
unless WSAStartup (whatever that is) happens to be storing a value
in through the pointer that you are providing to it.

> tport_n=htons(1037);


> result=bind(s,(struct sockaddr *) &saddr, sizeof(saddr));


What will happen if the port is already in use?

> buffer="My server name is: MIKY";
> printf("%s",buffer);


You do not appear to be flushing the buffer, and you are not
ending your buffers with \n . Possibly whatever you print is not
being sent until something later flushes the buffer, such as the
termination of the program. Consider using fflush(stdout).

>void err_fatal(char *mes)
>{
> printf("%s, errno=%d\n",mes,WSAGetLastError());
> perror("");


With your placement of perror() before the printf(), the
perror() could be reflecting an error result found in the
printf() routine rather than whatever error triggered you
calling err_fatal().

> system("pause");
> exit(1);
>}



--
"Any sufficiently advanced bug is indistinguishable from a feature."
-- Rich Kulawiec
 
Reply With Quote
 
 
 
 
M.Caggiano
Guest
Posts: n/a
 
      02-03-2008
On 3 Feb, 23:45, (E-Mail Removed)-cnrc.gc.ca (Walter Roberson) wrote:
> In article <(E-Mail Removed)>,
>
> M.Caggiano <(E-Mail Removed)> wrote:
> >This code wants to simulate a possible answer of a server, to an
> >application of connection aside a client.
> >I have a problem in the function "bind" (what I have underlined with
> >of the "- ") because its return value is "-1" (therefore error!).
> >I don't understand because the function return this value.
> >Can you help me?

>
> bind() is not part of the standard C library. As you appear to
> be using Windows, you should be asking in a Windows programming
> newsgroup.
>
> > WSADATA data; // inizializzo la variabile che contiene le primitive
> >di Winsock
> > err=WSAStartup(p,&data); // inizializzo la wsock32.dll verificandone
> >la mancanza di errori

>
> You are possibly using the value of data before it is initialized,
> unless WSAStartup (whatever that is) happens to be storing a value
> in through the pointer that you are providing to it.
>
> > tport_n=htons(1037);
> > result=bind(s,(struct sockaddr *) &saddr, sizeof(saddr));

>
> What will happen if the port is already in use?
>
> > buffer="My server name is: MIKY";
> > printf("%s",buffer);

>
> You do not appear to be flushing the buffer, and you are not
> ending your buffers with \n . Possibly whatever you print is not
> being sent until something later flushes the buffer, such as the
> termination of the program. Consider using fflush(stdout).
>
> >void err_fatal(char *mes)
> >{
> > printf("%s, errno=%d\n",mes,WSAGetLastError());
> > perror("");

>
> With your placement of perror() before the printf(), the
> perror() could be reflecting an error result found in the
> printf() routine rather than whatever error triggered you
> calling err_fatal().
>
> > system("pause");
> > exit(1);
> >}

>
> --
> "Any sufficiently advanced bug is indistinguishable from a feature."
> -- Rich Kulawiec


Thank's so much for the printf().

however i've resolved the problem of the "bind()".
All it took is changing number of port.
Thank's so much!!!
 
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
confused by boost::bind & boost::lambda::bind XHengDF@gmail.com C++ 0 05-29-2007 04:37 AM
Using a data-bind dropdownlist to populate another data-bind dropdownlist mr2_93 ASP .Net 1 10-02-2005 05:07 PM
Cannot bind to tcp/ip =?Utf-8?B?Um9zbWFuIENvbXB1dGluZw==?= Wireless Networking 1 09-23-2005 11:31 AM
Bind optional one-to-one relationship to textbox Dan Davenport via .NET 247 ASP .Net 0 08-04-2004 01:55 PM
How to bind data from XQuery to a Dataset ?? HNguyen ASP .Net 0 06-03-2004 07:32 PM



Advertisments