int -> ssize_t for socker recv and send

This commit is contained in:
Benjamin Sergeant 2019-01-05 20:53:50 -08:00
parent 9641c8cf49
commit 0fd06bb592
9 changed files with 32 additions and 29 deletions

View File

@ -36,7 +36,6 @@ set( IXWEBSOCKET_HEADERS
ixwebsocket/IXSetThreadName.h ixwebsocket/IXSetThreadName.h
ixwebsocket/IXDNSLookup.h ixwebsocket/IXDNSLookup.h
ixwebsocket/IXCancellationRequest.h ixwebsocket/IXCancellationRequest.h
ixwebsocket/IXNetSystem.h
ixwebsocket/IXWebSocket.h ixwebsocket/IXWebSocket.h
ixwebsocket/IXWebSocketServer.h ixwebsocket/IXWebSocketServer.h
ixwebsocket/IXWebSocketTransport.h ixwebsocket/IXWebSocketTransport.h
@ -58,6 +57,8 @@ else()
list( APPEND IXWEBSOCKET_SOURCES ixwebsocket/linux/IXSetThreadName_linux.cpp) list( APPEND IXWEBSOCKET_SOURCES ixwebsocket/linux/IXSetThreadName_linux.cpp)
endif() endif()
set (OPENSSL_PREFIX /usr/local/opt/openssl) # Homebrew openssl
include_directories(ixwebsocket ${OPENSSL_PREFIX}/include)
if (USE_TLS) if (USE_TLS)
add_definitions(-DIXWEBSOCKET_USE_TLS) add_definitions(-DIXWEBSOCKET_USE_TLS)
@ -65,6 +66,8 @@ if (USE_TLS)
if (APPLE) if (APPLE)
list( APPEND IXWEBSOCKET_HEADERS ixwebsocket/IXSocketAppleSSL.h) list( APPEND IXWEBSOCKET_HEADERS ixwebsocket/IXSocketAppleSSL.h)
list( APPEND IXWEBSOCKET_SOURCES ixwebsocket/IXSocketAppleSSL.cpp) list( APPEND IXWEBSOCKET_SOURCES ixwebsocket/IXSocketAppleSSL.cpp)
list( APPEND IXWEBSOCKET_HEADERS ixwebsocket/IXSocketOpenSSL.h)
list( APPEND IXWEBSOCKET_SOURCES ixwebsocket/IXSocketOpenSSL.cpp)
elseif (WIN32) elseif (WIN32)
list( APPEND IXWEBSOCKET_HEADERS ixwebsocket/IXSocketSChannel.h) list( APPEND IXWEBSOCKET_HEADERS ixwebsocket/IXSocketSChannel.h)
list( APPEND IXWEBSOCKET_SOURCES ixwebsocket/IXSocketSChannel.cpp) list( APPEND IXWEBSOCKET_SOURCES ixwebsocket/IXSocketSChannel.cpp)

View File

@ -84,29 +84,29 @@ namespace ix
_sockfd = -1; _sockfd = -1;
} }
int Socket::send(char* buffer, size_t length) ssize_t Socket::send(char* buffer, size_t length)
{ {
int flags = 0; int flags = 0;
#ifdef MSG_NOSIGNAL #ifdef MSG_NOSIGNAL
flags = MSG_NOSIGNAL; flags = MSG_NOSIGNAL;
#endif #endif
return (int) ::send(_sockfd, buffer, length, flags); return ::send(_sockfd, buffer, length, flags);
} }
int Socket::send(const std::string& buffer) ssize_t Socket::send(const std::string& buffer)
{ {
return send((char*)&buffer[0], buffer.size()); return send((char*)&buffer[0], buffer.size());
} }
int Socket::recv(void* buffer, size_t length) ssize_t Socket::recv(void* buffer, size_t length)
{ {
int flags = 0; int flags = 0;
#ifdef MSG_NOSIGNAL #ifdef MSG_NOSIGNAL
flags = MSG_NOSIGNAL; flags = MSG_NOSIGNAL;
#endif #endif
return (int) ::recv(_sockfd, (char*) buffer, length, flags); return ::recv(_sockfd, (char*) buffer, length, flags);
} }
int Socket::getErrno() int Socket::getErrno()

View File

@ -35,9 +35,9 @@ namespace ix
const CancellationRequest& isCancellationRequested); const CancellationRequest& isCancellationRequested);
virtual void close(); virtual void close();
virtual int send(char* buffer, size_t length); virtual ssize_t send(char* buffer, size_t length);
virtual int send(const std::string& buffer); virtual ssize_t send(const std::string& buffer);
virtual int recv(void* buffer, size_t length); virtual ssize_t recv(void* buffer, size_t length);
// Blocking and cancellable versions, working with socket that can be set // Blocking and cancellable versions, working with socket that can be set
// to non blocking mode. Used during HTTP upgrade. // to non blocking mode. Used during HTTP upgrade.

View File

@ -203,7 +203,7 @@ namespace ix
Socket::close(); Socket::close();
} }
int SocketAppleSSL::send(char* buf, size_t nbyte) ssize_t SocketAppleSSL::send(char* buf, size_t nbyte)
{ {
ssize_t ret = 0; ssize_t ret = 0;
OSStatus status; OSStatus status;
@ -218,16 +218,16 @@ namespace ix
if (ret == 0 && errSSLClosedAbort != status) if (ret == 0 && errSSLClosedAbort != status)
ret = -1; ret = -1;
return (int) ret; return ret;
} }
int SocketAppleSSL::send(const std::string& buffer) ssize_t SocketAppleSSL::send(const std::string& buffer)
{ {
return send((char*)&buffer[0], buffer.size()); return send((char*)&buffer[0], buffer.size());
} }
// No wait support // No wait support
int SocketAppleSSL::recv(void* buf, size_t nbyte) ssize_t SocketAppleSSL::recv(void* buf, size_t nbyte)
{ {
OSStatus status = errSSLWouldBlock; OSStatus status = errSSLWouldBlock;
while (errSSLWouldBlock == status) while (errSSLWouldBlock == status)

View File

@ -28,9 +28,9 @@ namespace ix
const CancellationRequest& isCancellationRequested) final; const CancellationRequest& isCancellationRequested) final;
virtual void close() final; virtual void close() final;
virtual int send(char* buffer, size_t length) final; virtual ssize_t send(char* buffer, size_t length) final;
virtual int send(const std::string& buffer) final; virtual ssize_t send(const std::string& buffer) final;
virtual int recv(void* buffer, size_t length) final; virtual ssize_t recv(void* buffer, size_t length) final;
private: private:
SSLContextRef _sslContext; SSLContextRef _sslContext;

View File

@ -43,7 +43,7 @@ namespace ix
{ {
errMsg = "no error"; errMsg = "no error";
int fd = socket(address->ai_family, auto fd = socket(address->ai_family,
address->ai_socktype, address->ai_socktype,
address->ai_protocol); address->ai_protocol);
if (fd < 0) if (fd < 0)

View File

@ -326,7 +326,7 @@ namespace ix
Socket::close(); Socket::close();
} }
int SocketOpenSSL::send(char* buf, size_t nbyte) ssize_t SocketOpenSSL::send(char* buf, size_t nbyte)
{ {
ssize_t sent = 0; ssize_t sent = 0;
@ -340,7 +340,7 @@ namespace ix
} }
ERR_clear_error(); ERR_clear_error();
int write_result = SSL_write(_ssl_connection, buf + sent, (int) nbyte); ssize_t write_result = SSL_write(_ssl_connection, buf + sent, (int) nbyte);
int reason = SSL_get_error(_ssl_connection, write_result); int reason = SSL_get_error(_ssl_connection, write_result);
if (reason == SSL_ERROR_NONE) { if (reason == SSL_ERROR_NONE) {
@ -353,16 +353,16 @@ namespace ix
return -1; return -1;
} }
} }
return (int) sent; return sent;
} }
int SocketOpenSSL::send(const std::string& buffer) ssize_t SocketOpenSSL::send(const std::string& buffer)
{ {
return send((char*)&buffer[0], buffer.size()); return send((char*)&buffer[0], buffer.size());
} }
// No wait support // No wait support
int SocketOpenSSL::recv(void* buf, size_t nbyte) ssize_t SocketOpenSSL::recv(void* buf, size_t nbyte)
{ {
while (true) while (true)
{ {
@ -374,7 +374,7 @@ namespace ix
} }
ERR_clear_error(); ERR_clear_error();
int read_result = SSL_read(_ssl_connection, buf, (int) nbyte); ssize_t read_result = SSL_read(_ssl_connection, buf, (int) nbyte);
if (read_result > 0) if (read_result > 0)
{ {

View File

@ -31,9 +31,9 @@ namespace ix
const CancellationRequest& isCancellationRequested) final; const CancellationRequest& isCancellationRequested) final;
virtual void close() final; virtual void close() final;
virtual int send(char* buffer, size_t length) final; virtual ssize_t send(char* buffer, size_t length) final;
virtual int send(const std::string& buffer) final; virtual ssize_t send(const std::string& buffer) final;
virtual int recv(void* buffer, size_t length) final; virtual ssize_t recv(void* buffer, size_t length) final;
private: private:
void openSSLInitialize(); void openSSLInitialize();

View File

@ -60,7 +60,7 @@ namespace ix
uint16_t code; uint16_t code;
std::string reason; std::string reason;
WebSocketCloseInfo(uint64_t c = 0, WebSocketCloseInfo(uint16_t c = 0,
const std::string& r = std::string()) const std::string& r = std::string())
: code(c) : code(c)
, reason(r) , reason(r)