SSL_connect ()가 select ()와 함께 작동하지 않습니다.

아르네 피셔

비 차단 소켓이 있고 SSL 연결을 만들기 위해 openssl을 사용하고 있습니다. 내 문제는 SSL_connect가 작동하는 방식입니다. SSL_ERROR_WANT_READ 또는 SSL_ERROR_WANT_WRITE를 반환합니다. 이러한 경우 SSL_connect를 다시 호출해야합니다. 이제 이것은 실제로 작동합니다. 내가 가진 문제는 프로그램이 소켓이 준비 될 때까지 기다려야하는 select ()가 작동하지 않는다는 것입니다. 이로 인해 SSL_connect에 대한 2000 개 이상의 호출이 발생하지만 좋지 않습니다.

다음은 프로그램의이 부분에 대한 내 코드입니다.

 int test = 0;
        while (test != 1) {
            test = SSL_connect(sslHandle);
            if (test != 1) { //test again or we would quit if we made a connection
                if (SSL_get_error(sslHandle, test) != SSL_ERROR_WANT_READ && SSL_get_error(sslHandle, test) != SSL_ERROR_WANT_WRITE) {
                    //error happend
                    return -1;
                }
                FD_ZERO(&socketSet); //reset socketSet
                FD_SET(socket, &socketSet); //init socketSet with our socket
                if (test == SSL_ERROR_WANT_READ) {

                    result = select(socket + 1, &socketSet, NULL, NULL, &timeoutCopy); //wait for the socket to be readable
                    if (result == 0) {
                        //timeout
                        return -1; 
                    } else if (result == -1) {
                        //error
                        return -1;
                    }


                } else {

                    result = select(socket + 1, NULL, &socketSet, NULL, &timeoutCopy); //wait for the socket to be writable
                    if (result == 0) {
                       //timeout
                        return -1; 
                    } else if (result == -1) {
                       //error
                        return -1; 
                    }

                }

            }
        }

나는 모든 오류 처리 항목과 로그를 제거하여 더 잘 읽을 수 있도록했습니다. timeoutCopy는 다른 곳에서 정의됩니다. 프로그램의 다른 부분에 대해 동일한 종류의 선택을 사용하고 있습니다. 내가 말했듯이 프로그램은 작동하지만 선택을 기다리지 않습니다. 잠을 잘 수 있지만 좋은 해결책은 아닙니다. 미리 감사드립니다!

아르네 피셔

좋아, 나는 더미입니다. 문제가 발생했습니다.

 if (test == SSL_ERROR_WANT_READ) 

이것은

if (SSL_get_error(sslHandle, sslConnectResult) == SSL_ERROR_WANT_READ) 

코드가 잘 작동하는 것보다. 4 ~ 5 회 반복되며 연결이있는 것보다 더 많습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

textAlignment가 supportsRtl false와 함께 작동하지 않습니다.

분류에서Dev

@RequestBody가 @JsonProperty와 함께 작동하지 않습니다.

분류에서Dev

Homebrew와 함께 postgresql 설치가 작동하지 않습니다.

분류에서Dev

Mysql 변수 '@'가 'IF'와 함께 작동하지 않습니다.

분류에서Dev

Javascript Alert가 에코와 함께 작동하지 않습니다.

분류에서Dev

ProgressBar가 javafx와 함께 작동하지 않습니다.

분류에서Dev

tsql : datediff가 DEFAULT getdate ()와 함께 작동하지 않습니다.

분류에서Dev

mysqli가 PHP 날짜와 함께 작동하지 않습니다.

분류에서Dev

찾기와 함께 Jquery 추가가 함께 작동하지 않습니다.

분류에서Dev

JavaScript forEach 메서드가 Arrow 함수와 함께 작동하지 않습니다.

분류에서Dev

jquery .load가 함수 매개 변수와 함께 작동하지 않습니다.

분류에서Dev

CodeIgniter UPDATE 쿼리가 열 값 추가와 함께 작동하지 않습니다.

분류에서Dev

`throwsA`와 함께 사용하면`TypeMatcher`가 작동하지 않습니다.

분류에서Dev

sync ()와 attach ()가 함께 작동하지 않습니까?

분류에서Dev

JSQMessagesViewController와 GeoFire가 함께 작동하지 않습니까?

분류에서Dev

SSL_connect ()가 반환되지 않음

분류에서Dev

ToTitleCase () 메서드가 특수 문자와 함께 작동하지 않습니다.

분류에서Dev

Dialogflow agent.add가 promise와 함께 작동하지 않습니다.

분류에서Dev

Material-table CustomSort가 날짜와 함께 작동하지 않습니다.

분류에서Dev

Mat Paginator가 Material Table의 FormArray와 함께 작동하지 않습니다.

분류에서Dev

SQL ORDER BY가 varchar 날짜와 함께 작동하지 않습니다.

분류에서Dev

일반 UpdateView가 슬러그와 함께 작동하지 않습니다.

분류에서Dev

Navigator.push가 flutter에서 setState와 함께 작동하지 않습니다.

분류에서Dev

클래스가 부모와 함께 jquery를 작동하지 않습니다.

분류에서Dev

RadioButton JS가 입력 ID와 함께 작동하지 않습니다.

분류에서Dev

.htaccess가 파일 태그와 함께 작동하지 않습니다.

분류에서Dev

SQL 쿼리가 날짜와 함께 작동하지 않습니다.

분류에서Dev

jQuery removeClass가 .closest 메서드와 함께 작동하지 않습니다.

분류에서Dev

각도 ng-src와 data-src가 함께 작동하지 않습니다.

Related 관련 기사

  1. 1

    textAlignment가 supportsRtl false와 함께 작동하지 않습니다.

  2. 2

    @RequestBody가 @JsonProperty와 함께 작동하지 않습니다.

  3. 3

    Homebrew와 함께 postgresql 설치가 작동하지 않습니다.

  4. 4

    Mysql 변수 '@'가 'IF'와 함께 작동하지 않습니다.

  5. 5

    Javascript Alert가 에코와 함께 작동하지 않습니다.

  6. 6

    ProgressBar가 javafx와 함께 작동하지 않습니다.

  7. 7

    tsql : datediff가 DEFAULT getdate ()와 함께 작동하지 않습니다.

  8. 8

    mysqli가 PHP 날짜와 함께 작동하지 않습니다.

  9. 9

    찾기와 함께 Jquery 추가가 함께 작동하지 않습니다.

  10. 10

    JavaScript forEach 메서드가 Arrow 함수와 함께 작동하지 않습니다.

  11. 11

    jquery .load가 함수 매개 변수와 함께 작동하지 않습니다.

  12. 12

    CodeIgniter UPDATE 쿼리가 열 값 추가와 함께 작동하지 않습니다.

  13. 13

    `throwsA`와 함께 사용하면`TypeMatcher`가 작동하지 않습니다.

  14. 14

    sync ()와 attach ()가 함께 작동하지 않습니까?

  15. 15

    JSQMessagesViewController와 GeoFire가 함께 작동하지 않습니까?

  16. 16

    SSL_connect ()가 반환되지 않음

  17. 17

    ToTitleCase () 메서드가 특수 문자와 함께 작동하지 않습니다.

  18. 18

    Dialogflow agent.add가 promise와 함께 작동하지 않습니다.

  19. 19

    Material-table CustomSort가 날짜와 함께 작동하지 않습니다.

  20. 20

    Mat Paginator가 Material Table의 FormArray와 함께 작동하지 않습니다.

  21. 21

    SQL ORDER BY가 varchar 날짜와 함께 작동하지 않습니다.

  22. 22

    일반 UpdateView가 슬러그와 함께 작동하지 않습니다.

  23. 23

    Navigator.push가 flutter에서 setState와 함께 작동하지 않습니다.

  24. 24

    클래스가 부모와 함께 jquery를 작동하지 않습니다.

  25. 25

    RadioButton JS가 입력 ID와 함께 작동하지 않습니다.

  26. 26

    .htaccess가 파일 태그와 함께 작동하지 않습니다.

  27. 27

    SQL 쿼리가 날짜와 함께 작동하지 않습니다.

  28. 28

    jQuery removeClass가 .closest 메서드와 함께 작동하지 않습니다.

  29. 29

    각도 ng-src와 data-src가 함께 작동하지 않습니다.

뜨겁다태그

보관