将SSL集成到使用BSD套接字的程序中

kam*_*iro 6 c sockets ssl openssl

我有一个TCP网络库,它实现了一堆协议(redis,http等),它们是使用BSD套接字实现的.

许多代码使用select()和其他用于BSD套接字的函数.我是否正确地认为这不适用于SSL套接字?或者他们会按原样工作吗?

我只是想知道SSL和BSD套接字是否如此不同以至于它们需要完全不同的实现方法.

Rem*_*eau 6

假设您指的是OpenSSL,它位于套接字之上,它不会替换它.因此,所有直接套接字操作select()仍然有效.然而不同的是,OpenSSL的处理阅读和写作给你,让你将取代recv()ssl_read()send()ssl_write(),但你可以(在某些情况下需要)仍采用select()直接.但是,您不能随时调用它,您必须等到OpenSSL告诉您调用它.因此,例如,如果您有一个select()首先调用的读取循环,然后recv()仅在select()报告可读性时调用,则必须交换该逻辑.ssl_read()首先调用,然后select只有在ssl_read()返回时调用()SSL_ERROR_WANT_READSSL_ERROR_WANT_WRITE(注意ssl_read()可以在内部执行写操作,并且ssl_write()可以在内部执行读操作).