Cocoaを使ってソケット接続のTTL値を明示的に設定したいと考えています。私はCoreFoundationのドキュメントで何か役に立つものを見ることができませんでした。 TTL値を設定するには、BSDソケットよりも低くする必要がありますか?Cocoaでは、パケットにTTLを設定するにはどうすればよいですか?
2
A
答えて
3
2つの可能性があります。
1)単純なC/Unixスタイルのソケットを使用することができます。最初にソケットを作成し、追加するものを含むsetsockopt()を使用してオプションを設定します。 )、最後にCFSocketCreateWithNative()を使ってCFSocketを作成します。あなたはCFアピス直接使用
2)は、例えば
CFSocketSendData
Sends data over a CFSocket object.
CFSocketError CFSocketSendData (
CFSocketRef s,
CFDataRef address,
CFDataRef data,
CFTimeInterval timeout
);
は、ソケットオプションSO_SNDTIMEOを設定するのと同じである、あなたはタイムアウトを設定することができます。
CFSocketCreateConnectedToSocketSignature
Creates a CFSocket object and opens a connection to a remote socket.
CFSocketRef CFSocketCreateConnectedToSocketSignature (
CFAllocatorRef allocator,
const CFSocketSignature *signature,
CFOptionFlags callBackTypes,
CFSocketCallBack callout,
const CFSocketContext *context,
CFTimeInterval timeout
);
大切にしています。
4
あなたはtracerouteのYAバリアントを書いていますか? ;)
はい、普通のCソケットAPIはあなたの友人です:setsockopt()
をIP_TTL
ソケットオプション(IPv4用)またはIPV6_UNICAST_HOPS
(IPv6用)と呼んでください。
1
私はCocoaAsyncSocketライブラリを使用しました。 AsyncUdpSocketというクラスがあり、これは下位レベルのソケットAPIのObj-Cラッパーです。ソケットのTTLを設定するメソッドを追加しました。
-(BOOL)setTTL:(int) ttlValue {
int socketFD = SOCKET_NULL;
if (socket4FD != SOCKET_NULL) {
socketFD = socket4FD;
}
else{
if (socket6FD != SOCKET_NULL) {
socketFD = socket6FD;
}
else{
NSLog(@"ERROR: TTL - No Socket Found!");
return NO;
}
}
int status = setsockopt(socketFD, IPPROTO_IP, IP_TTL, &ttlValue, sizeof(ttlValue));
if (status == -1){
NSLog(@"Error: TTL not set!");
return NO;
}
NSLog(@"TTL: %d", ttlValue);
return YES;
}
私はIPv4のみのためにそれをテストしました。 IPv6の場合はとしてくださいIPv6_UNICAST_HOPS
関連する問題
- 1. actionscript 3でUDPパケットのTTLを設定するにはどうすればよいですか?
- 2. ブラウザのキャッシュストレージにTTLを設定するにはどうすればよいですか?
- 3. CocoaでWebViewキャッシュをクリアするにはどうすればよいですか?
- 4. MONKを使用してドキュメントを期限切れにするようにTTLを設定するにはどうすればよいですか?
- 5. Cocoaエラー513を修正するにはどうすればよいですか?
- 6. Libharuでトランスフォーメーションマトリックスを設定するにはどうすればよいですか?
- 7. UIImageViewでUIGestureRecognizerを設定するにはどうすればよいですか?
- 8. ダイアログでButto.onClickListenerを設定するにはどうすればよいですか?
- 9. Glassfishでログレベルを設定するにはどうすればよいですか?
- 10. Razor:ValidationSummaryでクラスを設定するにはどうすればよいですか?
- 11. Dockerfileで$ PS1を設定するにはどうすればよいですか?
- 12. STOMPでActiveMQを設定するにはどうすればよいですか?
- 13. MEFでPrivateBinPathを設定するにはどうすればよいですか?
- 14. HttpWebRequest.GetRequestStreamでタイムアウトを設定するにはどうすればよいですか?
- 15. PhpStormでデータベースを設定するにはどうすればよいですか?
- 16. SimpleJdbcTemplateでsetQueryTimeoutを設定するにはどうすればよいですか?
- 17. スクラップスプラッシュでスプラッシュタイムアウトを設定するにはどうすればよいですか?
- 18. AndroidでReceiverを設定するにはどうすればよいですか?
- 19. PieChartでフォントサイズを設定するにはどうすればよいですか?
- 20. sbtでマルチステージテストパイプラインを設定するにはどうすればよいですか?
- 21. ミドルウェアでcurrent_userを設定するにはどうすればよいですか?
- 22. Androidでキープアライブタイムアウトを設定するにはどうすればよいですか?
- 23. マスターページでビューステートを設定するにはどうすればよいですか?
- 24. AS3でレンダーエリアを設定するにはどうすればよいですか?
- 25. Netbeansでウォッチポイントを設定するにはどうすればよいですか?
- 26. ArrayAdapterでonClickListenerを設定するにはどうすればよいですか?
- 27. XNAでlidgrenを設定するにはどうすればよいですか?
- 28. モンゴイドでreferences_oneを設定するにはどうすればよいですか?
- 29. Eclipseでインスタンスブレークポイントを設定するにはどうすればよいですか?
- 30. UIViewControllerでparentViewControllerを設定するにはどうすればよいですか?