Java NIO: IOException이란 무엇입니까?끊어진 파이프는?
일부의 경우 Java NIO가 SocketChannel.write(ByteBuffer) ,, an, , an, 됩, 됩을 던집니다.IOException "된 파이프 : '아주머니'
무엇이 "파손된 파이프"의 원인이며, 더 중요한 것은 그 상태에서 회복이 가능한가?복구가 안 된다면 돌이킬 수 없는 문제가 발생했다는 좋은 징조일 것 같고, 이 소켓 접속을 간단히 닫아야 할 것 같습니다.게게합 ?리 ?? ???? 때가 있나요?IOException(어느 시점에서 장애가 발생한 접속이 아닌) 소켓 접속이 정상적으로 접속되어 있는 동안 발생할 수 있습니까?
요?SocketChannel.isConnected()를 하기 전에SocketChannel.write()이 「절단는, 접속이 「절단」 있는 것을 로 하고, 양쪽 모두 「절단」 것을 전제로 할 수 .SocketChannel.isConnected() ★★★★★★★★★★★★★★★★★」SocketChannel.isConnectionPending() 다이다false
감사합니다!
무엇이 "파이프 파손"의 원인이고, 더 중요한 것은 그 상태에서 회복이 가능하다는 것인가?
접속이 닫히는 원인이 되고 있는 것이 원인입니다.(접속을 종료한 것은 어플리케이션이 아닙니다.다른 예외가 발생했을 가능성이 있습니다.
연결을 복구할 수 없습니다.새로 열어야 해요.
복구가 안 된다면 돌이킬 수 없는 문제가 발생했다는 좋은 징조일 것 같고, 이 소켓 접속을 간단히 닫아야 할 것 같습니다.그게 합리적인 추정인가요?
네.일단 이 예외를 받으면 소켓은 다시 작동하지 않습니다.그것을 닫는 것이 유일하게 현명한 일이다.
때가 있나요?
IOException(어느 시점에서 장애가 발생한 접속이 아닌) 소켓 접속이 정상적으로 접속되어 있는 동안 발생할 수 있습니까?
아니요. (적어도 OS의 네트워크 스택, JVM 및/또는 어플리케이션의 적절한 동작을 파괴하지 않는 한)
전화하는 요?
SocketChannel.isConnected()를 하기 전에SocketChannel.write()
이에요, 안좋은생각이에요.r.isXYZ()하는 r2개의 콜간에 자원 상태가 변화할 가능성은 거의 없습니다.액션을 하는 것이 더 좋은 아이디어입니다.IOException(또는 그 어떤 것이든) 실패한 조치에서 비롯되며 필요한 모든 교정 조치를 취해야 합니다.
이 경우, 콜은isConnected()무의미해메서드는 반환하도록 정의되어 있습니다.true 소켓이 과거 어느 시점에서 접속되어 있었는지 확인합니다.접속이 아직 활성화되어 있는지 여부는 알 수 없습니다.접속이 아직 활성화되어 있는지 여부를 판별하는 유일한 방법은 그것을 사용해 보는 것입니다(읽기 또는 쓰기 등).
파이프가 끊어진다는 것은 단순히 연결이 실패했음을 의미합니다.이를 회복할 수 없다고 가정하고 필요한 청소 작업(접속 종료 등)을 수행하는 것이 합리적입니다.단순히 연결이 아직 완전하지 않다는 이유만으로 이것을 볼 수 있으리라고는 생각하지 않습니다.
비블로킹 모드를 사용하는 경우 Socket Channel.connect 메서드는 false를 반환하며 연결이 완료되었는지 확인하려면 isConnectionPending 메서드와 finishConnect 메서드를 사용해야 합니다.통상, 「isConnected」라고 하는 빈번한 호출에 의존하지 않고, 동작하는 것을 상정해 코드를 작성하고, 예외를 검출해 장애를 검출합니다.
파이프가 끊겼다는 것은 다른 쪽 끝에서 이미 닫힌 연결에 썼다는 것을 의미합니다.
isConnected()는 이 상태를 검출하지 않습니다.글씨만 쓸 수 있어요.
는 소켓채널을 시도하기 전에 항상 SocketChannel.isConnected()를 호출하는 것이 좋습니다.기입()
그것은 무의미하다.소켓 자체는 접속되어 있다.연결했군요.접속되어 있지 않을 가능성이 있는 것은 접속 자체이며, 접속을 시도하지 않으면 판단할 수 없습니다.
반대쪽에서 소켓이 닫혀 있다고 가정해야 합니다.IOException용 Try Catch Block으로 코드를 감습니다.
isConnected()를 사용하여 소켓채널이 연결되어 있는지 여부를 판별할 수 있지만 write() 호출이 종료되기 전에 변경될 수 있습니다.실제로 이것이 IOException이 발생하는 이유인지 여부를 캐치 블록에 호출해 보십시오.
언급URL : https://stackoverflow.com/questions/1181255/java-nio-what-does-ioexception-broken-pipe-mean
'source' 카테고리의 다른 글
| MySQL 업데이트 쿼리의 값 증가 (0) | 2022.12.01 |
|---|---|
| Java EE 6 @javax. 주석.Managed Bean과@paramax.displaces.displaces.이름 붙이기 vs@paramax.faces.Managed Bean (0) | 2022.12.01 |
| openjdk-6-jre, openjdk-6-jre-headless, openjdk-6-jre-lib의 차이점 (0) | 2022.12.01 |
| String과 동등합니다.jQuery 형식 (0) | 2022.12.01 |
| MySQL 오프셋 무한 행 (0) | 2022.12.01 |