mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-12-02 01:17:52 +03:00
init: Some initialization fixes.
- Check result of ssh_init() in privatekey_from_base64() - Moved code from ssh_finalize() to appropriate subroutines - Only initialize sockets once (caused mismatch of WSAStartup() and WSACleanup() calls and potential usage of bsd_poll when win_poll should be used)
This commit is contained in:
committed by
Andreas Schneider
parent
040a543f57
commit
3ae01ff9f5
24
src/socket.c
24
src/socket.c
@@ -91,6 +91,8 @@ struct ssh_socket_struct {
|
||||
ssh_poll_handle poll_out;
|
||||
};
|
||||
|
||||
static int sockets_initialized = 0;
|
||||
|
||||
static int ssh_socket_unbuffered_read(ssh_socket s, void *buffer, uint32_t len);
|
||||
static int ssh_socket_unbuffered_write(ssh_socket s, const void *buffer,
|
||||
uint32_t len);
|
||||
@@ -100,16 +102,20 @@ static int ssh_socket_unbuffered_write(ssh_socket s, const void *buffer,
|
||||
* \brief inits the socket system (windows specific)
|
||||
*/
|
||||
int ssh_socket_init(void) {
|
||||
if (sockets_initialized == 0) {
|
||||
#ifdef _WIN32
|
||||
struct WSAData wsaData;
|
||||
struct WSAData wsaData;
|
||||
|
||||
/* Initiates use of the Winsock DLL by a process. */
|
||||
if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) {
|
||||
return -1;
|
||||
}
|
||||
/* Initiates use of the Winsock DLL by a process. */
|
||||
if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif
|
||||
ssh_poll_init();
|
||||
ssh_poll_init();
|
||||
|
||||
sockets_initialized = 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -118,7 +124,13 @@ int ssh_socket_init(void) {
|
||||
* @brief Cleanup the socket system.
|
||||
*/
|
||||
void ssh_socket_cleanup(void) {
|
||||
if (sockets_initialized == 1) {
|
||||
ssh_poll_cleanup();
|
||||
#ifdef _WIN32
|
||||
WSACleanup();
|
||||
#endif
|
||||
sockets_initialized = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user