struct sockaddr_storage addr;
socklen_t addrLen;
char *ipString = NULL;
+ int tempError = ASOCKERR_SUCCESS;
int getaddrinfoError = AsyncTCPSocketResolveAddr(addrStr, port, socketFamily,
TRUE, &addr, &addrLen,
&ipString);
if (getaddrinfoError == 0) {
asock = AsyncTCPSocketListenImpl(&addr, addrLen, connectFn, clientData,
pollParams,
- outError);
+ &tempError);
if (asock) {
TCPSOCKLG0(asock,
"socket", ipString);
} else {
Log(ASOCKPREFIX "Could not create %s listener socket, error %d: %s\n",
- addr.ss_family == AF_INET ? "IPv4" : "IPv6", *outError,
- AsyncSocket_Err2String(*outError));
+ addr.ss_family == AF_INET ? "IPv4" : "IPv6", tempError,
+ AsyncSocket_Err2String(tempError));
}
free(ipString);
} else {
Log(ASOCKPREFIX "Could not resolve listener socket address.\n");
- if (outError) {
- *outError = ASOCKERR_ADDRUNRESV;
- }
+ tempError = ASOCKERR_ADDRUNRESV;
+ }
+
+ if (outError) {
+ *outError = tempError;
}
return asock;
AsyncSocketConnectFn connectFn, // IN
void *clientData, // IN
AsyncSocketPollParams *pollParams, // IN
- int *outError) // OUT
+ int *outError) // OUT: optional
{
struct sockaddr_vm addr;
AsyncTCPSocket *asock;
int vsockDev = -1;
+ int tempError = ASOCKERR_SUCCESS;
memset(&addr, 0, sizeof addr);
addr.svm_family = VMCISock_GetAFValueFd(&vsockDev);
asock = AsyncTCPSocketListenImpl((struct sockaddr_storage *)&addr,
sizeof addr,
connectFn, clientData, pollParams,
- outError);
+ &tempError);
+ if (outError) {
+ *outError = tempError;
+ }
VMCISock_ReleaseAFValueFd(vsockDev);
return BaseSocket(asock);
socklen_t addrLen, // IN
int *outError) // OUT
{
- int error = ASOCKERR_BIND;
int sysErr;
unsigned int port;
if (bind(asock->fd, (struct sockaddr *)addr, addrLen) != 0) {
sysErr = ASOCK_LASTERROR();
if (sysErr == ASOCK_EADDRINUSE) {
- error = ASOCKERR_BINDADDRINUSE;
+ *outError = ASOCKERR_BINDADDRINUSE;
}
Warning(ASOCKPREFIX "Could not bind socket, error %d: %s\n", sysErr,
Err_Errno2String(sysErr));
SSL_Shutdown(asock->sslSock);
free(asock);
- if (outError) {
- *outError = error;
- }
-
return FALSE;
}
int *outError) // OUT
{
VMwareStatus pollStatus;
- int error;
ASSERT(NULL != asock);
ASSERT(NULL != asock->sslSock);
if (!connectFn) {
Warning(ASOCKPREFIX "invalid arguments to listen!\n");
- error = ASOCKERR_INVAL;
+ *outError = ASOCKERR_INVAL;
goto error;
}
int sysErr = ASOCK_LASTERROR();
Warning(ASOCKPREFIX "could not listen on socket, error %d: %s\n",
sysErr, Err_Errno2String(sysErr));
- error = ASOCKERR_LISTEN;
+ *outError = ASOCKERR_LISTEN;
goto error;
}
if (pollStatus != VMWARE_STATUS_SUCCESS) {
TCPSOCKWARN(asock, "could not register accept callback!\n");
- error = ASOCKERR_POLL;
+ *outError = ASOCKERR_POLL;
AsyncTCPSocketUnlock(asock);
goto error;
}
SSL_Shutdown(asock->sslSock);
free(asock);
- if (outError) {
- *outError = error;
- }
-
return FALSE;
}
AsyncSocketConnectFn connectFn, // IN
void *clientData, // IN
AsyncSocketPollParams *pollParams, // IN
- int *outError) // OUT
+ int *outError) // OUT: optional
{
struct sockaddr_un addr;
AsyncTCPSocket *asock;
+ int tempError = ASOCKERR_SUCCESS;
memset(&addr, 0, sizeof addr);
addr.sun_family = AF_UNIX;
asock = AsyncTCPSocketListenImpl((struct sockaddr_storage *)&addr,
sizeof addr, connectFn, clientData,
- pollParams, outError);
+ pollParams, &tempError);
+ if (outError) {
+ *outError = tempError;
+ }
return BaseSocket(asock);
}