Am Mittwoch, 26. Dezember 2012 23:02:08 UTC+1 schrieb Ian Collins:
Please wrap your lines!
What did you try? What error did you get?
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;
if (family == AF_INET) {
try {
struct sockaddr_in servaddr;;
bzero(&servaddr, sizeof(servaddr) );
servaddr.sin_family = family;
servaddr.sin_port = htons(SERV_PORT);
if (inet_pton(family, ip, &servaddr.sin_addr) <= 0) {
perror("inet_pton-error: ");
}
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;
}
int main(int argc, char *argv[]) {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
void* ptr = InitAndConnect(int sockfd, AF_INET, argv[1]) {
return 0;
}
Here are the errors:
xxx54@richard:~/myC++/unp/derplan> g++ -o init -Wall -pedantic -O3 init_test.cpp
init_test.cpp: In function ‘void* InitAndConnect(int, int, char*)’:
init_test.cpp:28:12: error: no match for ‘operator=’ in ‘sa = servaddr’
/usr/include/bits/socket.h:179:3: note: candidate is: sockaddr& sockaddr:

perator=(const sockaddr&)
init_test.cpp:46:12: error: no match for ‘operator=’ in ‘sa = servaddr’
/usr/include/bits/socket.h:179:3: note: candidate is: sockaddr& sockaddr:

perator=(const sockaddr&)
init_test.cpp:50:10: error: cannot convert ‘sockaddr’ to ‘void*’ inreturn
init_test.cpp: In function ‘int main(int, char**)’:
init_test.cpp:56:31: error: expected primary-expression before ‘int’
init_test.cpp:56:61: error: expected ‘,’ or ‘;’ before ‘{’ token
init_test.cpp:55:7: warning: unused variable ‘sockfd’
init_test.cpp:56:9: warning: unused variable ‘ptr’
init_test.cpp:59:1: error: expected ‘}’ at end of input
init_test.cpp: In function ‘void* InitAndConnect(int, int, char*)’:
init_test.cpp:51:1: warning: control reaches end of non-void function
xxx54@richard:~/myC++/unp/derplan>