小编Tim*_*ith的帖子

您可以在 Windows 上 _close()、_read() 和 _write() 套接字吗?

MSDN说的closesocket()是要使用的函数。然而,我忍不住想知道是否_close()也有效?

MSDN 似乎在 SOCKET 类型的描述中说不:(http://msdn.microsoft.com/en-us/windows/ms740516(v=vs.80)):

在 Winsock 应用程序中,套接字描述符不是文件描述符,必须与 Winsock 函数一起使用。

更具体地说,来自其关于重命名套接字函数的注释

套接字由 Berkeley Sockets 中的标准文件描述符表示,因此该close函数可用于关闭套接字以及常规文件。虽然 Windows Sockets 中没有任何内容可以阻止实现使用常规文件句柄来识别套接字,但也没有什么需要它。在 Windows 上,必须使用closesocket例程关闭套接字。在 Windows 上,使用该close函数关闭套接字是不正确的,并且本规范未定义这样做的效果。

然而,尽管如此,一些 Windows 文件函数在实践中可能与套接字一起工作:

鉴于ReadFileandWriteFile在套接字上工作,我怀疑_readand_write也可能与套接字以及文件句柄一起工作。

MSDN 对套接字句柄的概述指出:

套接字句柄可以选择是 Windows Sockets 2 中的文件句柄。来自 Winsock 提供程序的套接字句柄可以与其他非 Winsock 函数(例如ReadFileWriteFileReadFileEx和 )一起使用WriteFileEx

sockets winapi

7
推荐指数
1
解决办法
2113
查看次数

如何为我的.NET应用程序启用DEP或ASLR?

我在VS2010中编写程序,构建目标是.NET 4.我相信默认情况下DEP兼容性标志是打开的.真的吗?

.NET默认情况下是否与ASLR兼容,并且默认为我的进程打开ASLR,或者我是否必须在运行时请求它?

.net security data-execution-prevention aslr

6
推荐指数
1
解决办法
4049
查看次数

P/invoke函数将指针指向struct

诸如CreateProcess之类的函数具有指向结构的指针.在CI中,它只是NULL作为可选参数的指针传递,而不是在堆栈上创建虚拟结构对象并将指针传递给虚拟对象.

在C#中,我已将其声明为(p/invoke)

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        public static extern bool CreateProcess(
            string lpApplicationName,
            string lpCommandLine,
            ref SECURITY_ATTRIBUTES lpProcessAttributes,
            ref SECURITY_ATTRIBUTES lpThreadAttributes,
            bool bInheritHandles,
            CreateProcessFlags dwProcessCreationFlags,
            IntPtr lpEnvironment,
            string lpCurrentDirectory,
            ref STARTUPINFO lpStartupInfo,
            ref PROCESS_INFORMATION lpProcessInformation);
Run Code Online (Sandbox Code Playgroud)

但是,如果我试图通过nulllpProcessAttributes论点或lpThreadAttributes论据,我得到一个编译错误:

错误2参数3:无法从"<null>"转换为"ref Debugging.Wrappers.SECURITY_ATTRIBUTES"

如何修改上面的函数签名,以便我可以传递nullSECURITY_ATTRIBUTES参数,而不会出现此编译器错误?(如果我愿意,还能传递一个真正的结构?)

c# pinvoke winapi interop

6
推荐指数
2
解决办法
3835
查看次数

.net 枚举是 blittable 类型吗?(编组)

显然有一个 blittable 类型列表,到目前为止我没有看到 Enums 专门针对它。它们总体上是可传输的吗?还是取决于它们是否使用 blittable 基类型声明?

//e.g.
internal enum SERVERCALL : uint
{
    IsHandled = 0,
    Rejected = 1,
    RetryLater = 2,
}
Run Code Online (Sandbox Code Playgroud)

参考文献:

.net pinvoke enums marshalling

6
推荐指数
2
解决办法
2601
查看次数

如何从Brush(例如DrawingBrush)转换为BitmapSource?

我有一个带有一些矢量图形的DrawingBrush.我想将它转换为BitmapSource作为将其转换为Bitmap的中间步骤.最好的方法是什么?

wpf bitmapsource drawingbrush

6
推荐指数
1
解决办法
2422
查看次数

针对SQl Server bacpac文件的Import\Export的最新建议

我正在尝试启动并运行Windows Azure,但发现数据库方面非常令人沮丧.我需要将本地数据库从SQL 2008导出到bacpac文件,然后导入Azure.我还希望能够从Azure导出,然后导入到我的本地数据库进行调试.

我已经在网上找到了一些实现此目的的教程,但是每次我通过其中一个部分时,我最终都会找到一个部分,需要一个信息或下载标记为过时的步骤!它似乎随着时间的推移发生了很大的变化,我无法找到最新的资源

任何人都可以提供有关如何执行此操作的更新链接?

谢谢

sql sql-server-2008-r2 bacpac azure-sql-database

6
推荐指数
2
解决办法
1万
查看次数

与text/plain ContentType一起使用的正确换行符是什么?

当一个网络服务器声称ContentType:HTTP响应中的text/plain时,客户端可以假设换行符是'\n',或者'\ r \n',还是其他东西,或者它应该允许两者?

标准指定了什么?我在标准中迷茫和困惑.RFC 2046似乎定义了"普通"子类型,但是引用了RFC 822.

我已经浏览了RFC 822但是我很困惑它是否明确表示不允许CRLF(\ r \n)(在消息体中),或者是否应该隐式允许CRLF,因为任何ASCII字符在空白后都是合法的线?

RFC 5322定义了'互联网消息格式',我不确定这是否适用于HTTP(它似乎适用于电子邮件),但它具体说明你应该看到的消息体中的唯一CR或LF是CRLF组合. ?

content-type newline http

6
推荐指数
1
解决办法
2054
查看次数

如何自动检查powershell脚本文件?

我想为一些生成powershell脚本的代码编写单元测试,然后检查脚本是否具有有效的语法.

在没有实际执行脚本的情况下执行此操作的好方法是什么?

.NET代码解决方案是理想的,但是我可以通过启动外部进程来使用命令行解决方案.

validation powershell

5
推荐指数
3
解决办法
5703
查看次数

IOCP 的 RIO 比事件有什么优势吗?

RIO 在这里代表 Windows8 'Registered I/O'网络扩展。从示例代码来看,似乎无论您是将 RIONotify 与事件还是 IO 完成端口一起使用,您基本上最终都会编写相同的循环,并且具有几乎相同的性能特征。循环体是:

RIONotify() [event or IOCP]
Wait [on the event, or using GetQueuedCompletionStatus()]
RIODequeueCompletion()
// Process the dequeued events
Run Code Online (Sandbox Code Playgroud)

基本上,IO 完成端口的使用似乎没有提供超过“事件”通知/等待的附加功能,因为实际的消息队列是使用 RIODequeueCompletion 完成的。因此,您使用事件还是 IOCP 都没有关系。我的问题是,我是否忽略了模型之间的任何有趣或重要的区别?

sockets winapi

4
推荐指数
1
解决办法
1477
查看次数

轮询锁定是否是实现关键部分的正确方法?

如果我有一个关键部分,我必须实现一个锁定它的方法.我看到了以下变体:

while(lock)
{
    //do nothing
}
lock = true;
// code of critical section
lock = false;
Run Code Online (Sandbox Code Playgroud)

但是,我对它持怀疑态度,因为从理论上讲,几个线程可以执行while(lock)(检查并看到它是假的),并且一起进入临界区,因为while(lock)并且lock = true;不是在一个连续的块中执行.我错了吗?或者这确实是一种不安全的方法?

c locking critical-section

3
推荐指数
1
解决办法
246
查看次数