⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bio_should_retry.pod

📁 开源的ssl算法openssl,版本0.9.8H
💻 POD
字号:
=pod=head1 NAMEBIO_should_retry, BIO_should_read, BIO_should_write,BIO_should_io_special, BIO_retry_type, BIO_should_retry,BIO_get_retry_BIO, BIO_get_retry_reason - BIO retry functions=head1 SYNOPSIS #include <openssl/bio.h> #define BIO_should_read(a)		((a)->flags & BIO_FLAGS_READ) #define BIO_should_write(a)		((a)->flags & BIO_FLAGS_WRITE) #define BIO_should_io_special(a)	((a)->flags & BIO_FLAGS_IO_SPECIAL) #define BIO_retry_type(a)		((a)->flags & BIO_FLAGS_RWS) #define BIO_should_retry(a)		((a)->flags & BIO_FLAGS_SHOULD_RETRY) #define BIO_FLAGS_READ		0x01 #define BIO_FLAGS_WRITE	0x02 #define BIO_FLAGS_IO_SPECIAL	0x04 #define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) #define BIO_FLAGS_SHOULD_RETRY	0x08 BIO *	BIO_get_retry_BIO(BIO *bio, int *reason); int	BIO_get_retry_reason(BIO *bio);=head1 DESCRIPTIONThese functions determine why a BIO is not able to read or write data.They will typically be called after a failed BIO_read() or BIO_write()call.BIO_should_retry() is true if the call that produced this conditionshould then be retried at a later time.If BIO_should_retry() is false then the cause is an error condition.BIO_should_read() is true if the cause of the condition is that a BIOneeds to read data.BIO_should_write() is true if the cause of the condition is that a BIOneeds to read data.BIO_should_io_special() is true if some "special" condition, that is areason other than reading or writing is the cause of the condition.BIO_get_retry_reason() returns a mask of the cause of a retry conditionconsisting of the values B<BIO_FLAGS_READ>, B<BIO_FLAGS_WRITE>,B<BIO_FLAGS_IO_SPECIAL> though current BIO types will only set one ofthese.BIO_get_retry_BIO() determines the precise reason for the specialcondition, it returns the BIO that caused this condition and if B<reason> is not NULL it contains the reason code. The meaning ofthe reason code and the action that should be taken depends onthe type of BIO that resulted in this condition.BIO_get_retry_reason() returns the reason for a special condition ifpassed the relevant BIO, for example as returned by BIO_get_retry_BIO().=head1 NOTESIf BIO_should_retry() returns false then the precise "error condition"depends on the BIO type that caused it and the return code of the BIOoperation. For example if a call to BIO_read() on a socket BIO returns0 and BIO_should_retry() is false then the cause will be that theconnection closed. A similar condition on a file BIO will mean that ithas reached EOF. Some BIO types may place additional information onthe error queue. For more details see the individual BIO type manualpages.If the underlying I/O structure is in a blocking mode almost all currentBIO types will not request a retry, because the underlying I/Ocalls will not. If the application knows that the BIO type will neversignal a retry then it need not call BIO_should_retry() after a failedBIO I/O call. This is typically done with file BIOs.SSL BIOs are the only current exception to this rule: they can request aretry even if the underlying I/O structure is blocking, if a handshakeoccurs during a call to BIO_read(). An application can retry the failedcall immediately or avoid this situation by setting SSL_MODE_AUTO_RETRYon the underlying SSL structure.While an application may retry a failed non blocking call immediatelythis is likely to be very inefficient because the call will failrepeatedly until data can be processed or is available. An applicationwill normally wait until the necessary condition is satisfied. Howthis is done depends on the underlying I/O structure.For example if the cause is ultimately a socket and BIO_should_read()is true then a call to select() may be made to wait until data isavailable and then retry the BIO operation. By combining the retryconditions of several non blocking BIOs in a single select() callit is possible to service several BIOs in a single thread, thoughthe performance may be poor if SSL BIOs are present because long delayscan occur during the initial handshake process. It is possible for a BIO to block indefinitely if the underlying I/Ostructure cannot process or return any data. This depends on the behaviour ofthe platforms I/O functions. This is often not desirable: one solutionis to use non blocking I/O and use a timeout on the select() (orequivalent) call.=head1 BUGSThe OpenSSL ASN1 functions cannot gracefully deal with non blocking I/O:that is they cannot retry after a partial read or write. This is usuallyworked around by only passing the relevant data to ASN1 functions whenthe entire structure can be read or written.=head1 SEE ALSOTBA

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -