FskErr KprSocketConnect(KprSocket self, const char *host, int port) { FskErr err = kFskErrNone; long flags = 0; if (self->mode != kKprSocketModeUndefined) return kFskErrBadState; self->host = FskStrDoCopy(host); bailIfNULL(self->host); self->port = port; self->mode = kKprSocketModeTCP; if (self->secure) { FskSSLOption ssl; flags |= kConnectFlagsSSLConnection; FskNetSSLOptionInitialize(self->host, self->port, flags, kFskNetSocketDefaultPriority, &ssl); ssl.protocolVersion = self->tlsProtocolVersion; ssl.applicationProtocols = self->applicationProtocols; bailIfError(FskNetConnectToSecureHost(&ssl, self->certs, KprSocketOnConnect, self)); } else { bailIfError(FskNetConnectToHost((char *) self->host, self->port, false, KprSocketOnConnect, self, flags, NULL, "KprSocketTCP")); } bail: if (err) { KprSocketCleanup(self); } return err; }
FskErr KprMQTTClientReconnect(KprMQTTClient self) { FskErr err = kFskErrNone; long flags = 0; if (self->state != kKprMQTTStateDisconnected || self->host == NULL) { return kFskErrBadState; } self->state = kKprMQTTStateConnecting; bailIfError(FskNetConnectToHost(self->host, self->port, false, KprMQTTClientOnConnect, self, flags, NULL, "MQTT")); bail: if (err) KprMQTTClientForceClose(self); return err; }
static void KprWebSocketEndpointStartConnect(KprWebSocketEndpoint self) { FskErr err = kFskErrNone; int port = 80; long flags = 0; if (self->parts->port) port = self->parts->port; if (self->isSecure) { if (port == 80) port = 443; flags |= kConnectFlagsSSLConnection; } bailIfError(FskNetConnectToHost(self->parts->host, port, false, KprWebSocketEndpointConnectCallback, self, flags, NULL, "WebSocket")); bail: if (err) { FskDebugStr("ERROR: %d\n", err); CALLBACK(errorCallback)(self, err, "cannot start connection", self->refcon); } }